feat: Added support for enabling metrics in Feast Operator (#5317) (#… · feast-dev/feast@a8498c2
@@ -470,6 +470,13 @@ func (feast *FeastServices) setContainer(containers *[]corev1.Container, feastTy
470470ContainerPort: getTargetPort(feastType, tls),
471471Protocol: corev1.ProtocolTCP,
472472 })
473+if feastType == OnlineFeastType && feast.isMetricsEnabled(feastType) {
474+container.Ports = append(container.Ports, corev1.ContainerPort{
475+Name: "metrics",
476+ContainerPort: MetricsPort,
477+Protocol: corev1.ProtocolTCP,
478+ })
479+ }
473480 }
474481475482container.StartupProbe = &corev1.Probe{
@@ -565,6 +572,10 @@ func (feast *FeastServices) getContainerCommand(feastType FeastServiceType) []st
565572 }
566573567574deploySettings := FeastServiceConstants[feastType]
575+deploySettings.Args = append([]string{}, deploySettings.Args...)
576+if feastType == OnlineFeastType && feast.isMetricsEnabled(feastType) {
577+deploySettings.Args = append([]string{deploySettings.Args[0], "--metrics"}, deploySettings.Args[1:]...)
578+ }
568579targetPort := deploySettings.TargetHttpPort
569580tls := feast.getTlsConfigs(feastType)
570581@@ -732,6 +743,15 @@ func (feast *FeastServices) setService(svc *corev1.Service, feastType FeastServi
732743 },
733744 }
734745746+if feastType == OnlineFeastType && feast.isMetricsEnabled(feastType) {
747+svc.Spec.Ports = append(svc.Spec.Ports, corev1.ServicePort{
748+Name: "metrics",
749+Port: MetricsPort,
750+Protocol: corev1.ProtocolTCP,
751+TargetPort: intstr.FromInt(int(MetricsPort)),
752+ })
753+ }
754+735755return controllerutil.SetControllerReference(feast.Handler.FeatureStore, svc, feast.Handler.Scheme)
736756}
737757@@ -800,6 +820,18 @@ func (feast *FeastServices) getLogLevelForType(feastType FeastServiceType) *stri
800820return nil
801821}
802822823+func (feast *FeastServices) isMetricsEnabled(feastType FeastServiceType) bool {
824+if feastType != OnlineFeastType {
825+return false
826+ }
827+828+if serviceConfigs := feast.getServerConfigs(feastType); serviceConfigs != nil && serviceConfigs.Metrics != nil {
829+return *serviceConfigs.Metrics
830+ }
831+832+return false
833+}
834+803835func (feast *FeastServices) getNodeSelectorForType(feastType FeastServiceType) *map[string]string {
804836if serviceConfigs := feast.getServerConfigs(feastType); serviceConfigs != nil {
805837return serviceConfigs.ContainerConfigs.OptionalCtrConfigs.NodeSelector
@@ -1100,7 +1132,9 @@ func (feast *FeastServices) initRoute(feastType FeastServiceType) *routev1.Route
11001132}
1101113311021134func applyCtrConfigs(container *corev1.Container, containerConfigs feastdevv1alpha1.ContainerConfigs) {
1103-container.Image = *containerConfigs.DefaultCtrConfigs.Image
1135+if containerConfigs.DefaultCtrConfigs.Image != nil {
1136+container.Image = *containerConfigs.DefaultCtrConfigs.Image
1137+ }
11041138// apply optional container configs
11051139if containerConfigs.OptionalCtrConfigs.Env != nil {
11061140container.Env = envOverride(container.Env, *containerConfigs.OptionalCtrConfigs.Env)