Prometheus: мониторинг AWS Load Balancer Controller Controller в AWS EKS

Thank you for reading this post, don't forget to subscribe!

AWS ALB Controller уме­ет в мет­ри­ки для Prometheus.

Исполь­зу­ем стан­дарт­ный URI /metrics.

Для нача­ла – про­ве­рим, что мет­ри­ки в поде есть.

Нахо­дим под:

Про­бра­сы­ва­ем на него порт:

И про­бу­ем с рабо­чей машины:

Супер – мет­ри­ки есть. Оста­лось их собрать.

Настройка Prometheus

У нас на каж­дом AWS Elastic Kubernetes кла­сте­ре свой Prometheus, кото­рый запус­ка­ет­ся и настра­и­ва­ет­ся через Prometheus Operator.

Инстан­сы Prometheus в Kubernetes через Prometheus federation под­клю­че­ны к цен­траль­но­му сер­ве­ру – он с них соби­ра­ет метрики.

Что нам надо: создать ServiceMonitor для Prometheus в Kubernetes, исполь­зуя кото­рый Prometheus нач­нёт соби­рать мет­ри­ки с нуж­но­го енд­по­ин­та, а затем отда­вать их в цен­траль­ный Prometheus, где мы сде­ла­ем алер­ты и даш­бор­ды в Grafana.

Несколь­ко кастом­ных ServiceMonitor у нас уже есть:

ALB Controller Service

AWS ALB Contoller у нас деп­ло­ит­ся из мани­фе­ста с Deployment, и созда­ёт толь­ко под. В слу­чае уста­нов­ки его из Helm-чар­та – там навер­ня­ка уже есть и сам Service, и даже, воз­мож­но, ServiceMonitor.

В нашем слу­чае для теста созда­дим новый Service, кото­рый будет про­бра­сы­вать тра­фик к поду с ALB Controller:

Сер­вис созда­ём в kube-system Namespace, там где живёт наш ALB Controller, а в его .spec.selector исполь­зу­ем labels из ALB Controller Deployment:

ALB Controller ServiceMonitor

Далее, опи­сы­ва­ем ServiceMonitor:

При­ме­ня­ем манифест:

Про­ве­рим Сервис:

Про­бра­сы­ва­ем порт к это­му сервису:

Про­ве­ря­ем доступ­ность метрик:


Про­ве­ря­ем в Kubernetes Prometheus – Status > Targets:

И мет­ри­ки:

И в цен­траль­ном Prometheus:

Оста­лось при­ду­мать алер­тов и даш­бор­ду для Grafana.