Особенности работы Prometheus в Nova Container Platform
В Nova Container Platform вы можете настроить Prometheus для сбора метрик с определённых pod’ов в Namespace. Для этого используется Prometheus Operator и ServiceMonitor.
ServiceMonitor — это специальный пользовательский ресурс (Custom Resource / CR) в Kubernetes, который используется в связке с Prometheus Operator для автоматизации настройки сбора метрик от сервисов, работающих в Kubernetes.
1. Настройка пространства имён
Чтобы Prometheus Operator начал работать с ServiceMonitor в Namespace, необходимо добавить метку при создании или затем в существующий Namespace:
labels:
nova-platform.io/cluster-monitoring: 'true'
Пример:
kind: Namespace
apiVersion: v1
metadata:
name: test
labels:
nova-platform.io/cluster-monitoring: 'true'
2. Создание ServiceMonitor
Далее необходимо содать ServiceMonitor, с которым Prometheus Operator начнет работу.
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: example
spec: {}
Пример:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: service-monitor-test
namespace: test
spec:
endpoints:
- interval: 30s
port: metrics
namespaceSelector:
matchNames:
- test
selector:
matchLabels:
app: test-exporter
Подсказки для настройки ServiceMonitor можно найти в веб-консоли Nova на странице . Найдите ServiceMonitor, перейдите на вкладку Экземпляры и нажмите Создать ServiceMonitor .
Далее следуйте подсказкам на боковой панели. Если боковая панель не отображается, нажмите на Посмотреть боковую панель.
3. Настрока pod’а
Создайте pod, который будет содержать сервис и встроенный экспортер. Pod должен содержать метку, указанную в ServiceMonitor.
Пример:
apiVersion: v1
kind: Service
metadata:
name: jmx
namespace: test
labels:
app: test-exporter
spec:
ports:
- name: metrics
port: 5556
targetPort: 5556
selector:
app: test-exporter
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
name: kafka
namespace: test
labels:
app: test-exporter
spec:
ports:
- name: broker
port: 9092
targetPort: 9092
- name: controller
port: 9093
targetPort: 9093
selector:
app: test-exporter
type: ClusterIP
---
apiVersion: v1
kind: ConfigMap
metadata:
name: test-exporter-config
namespace: test
labels:
app: test-exporter
data:
jmx-exporter-config.yaml: |
rules:
- pattern: ".*"
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: kafka
namespace: test
labels:
app: test-exporter
spec:
serviceName: "kafka"
replicas: 1
selector:
matchLabels:
app: test-exporter
template:
metadata:
labels:
app: test-exporter
spec:
volumes:
- name: test-config
configMap:
name: test-exporter-config
containers:
- name: kafka
image: bitnami/kafka:latest
ports:
- containerPort: 9092
env:
- name: KAFKA_CFG_NODE_ID
value: '0'
- name: KAFKA_CFG_PROCESS_ROLES
value: 'controller,broker'
- name: KAFKA_CFG_LISTENERS
value: 'PLAINTEXT://:9092,CONTROLLER://:9093'
- name: KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP
value: 'CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT'
- name: KAFKA_CFG_CONTROLLER_QUORUM_VOTERS
value: '0@kafka:9093'
- name: KAFKA_CFG_CONTROLLER_LISTENER_NAMES
value: CONTROLLER
- name: JMX_PORT
value: '5555'
volumeMounts:
- name: test-config
mountPath: /config
- name: test-exporter
image: bitnami/jmx-exporter:latest
ports:
- containerPort: 5556
name: metrics
env:
- name: JMX_EXPORTER_CONFIG
value: "/config/jmx-exporter-config.yaml"
volumeMounts:
- name: test-config
mountPath: /config
4. Проверка
-
Откройте веб-консоль Nova Container Platform и проверьте статус pod’а
prometheus-main-0в Namespacenova-monitoring. -
Откройте веб-консоль Prometheus и перейдите на вкладку .
-
Найдите нужный таргет, который будет отображаться в формате
serviceMonitor/<имя пространства имён>/<имя ServiceMonitor>/<номер>. -
Убедитесь, что Prometheus обнаружил экспортер.
|