Настройте prometheus для сбора пользовательских метрик из dockerized nodejs pod - PullRequest
1 голос
/ 18 июня 2020

Я установил prom-client (неофициальную клиентскую библиотеку для prometheus) для сбора необходимых мне метрик. У меня есть сервер Prometheus, развернутый из Helm, следуя этому руководству по установке eks . Теперь я пытаюсь отредактировать конфигурационную карту по умолчанию для сбора показателей моего приложения, но получаю ошибку

parsing YAML file /etc/config/prometheus.yml: yaml: unmarshal errors:\n line 22: field cluster_ip not found in type kubernetes.plain\n line 25: cannot unmarshal !!str по умолчанию into []string

Это то, что я сделал в соответствии с документами prometheus.yaml configmap файл

apiVersion: v1
data:
  alerting_rules.yml: |
    {}
  alerts: |
    {}
  prometheus.yml: |
    global:
      evaluation_interval: 1m
      scrape_interval: 1m
      scrape_timeout: 10s
    rule_files:
    - /etc/config/recording_rules.yml
    - /etc/config/alerting_rules.yml
    - /etc/config/rules
    - /etc/config/alerts
    scrape_configs:
    ...DEFAULT CONFIGS...
    - job_name: my_metrics
      scrape_interval: 5m
      scrape_timeout: 10s
      honor_labels: true
      metrics_path: /api/metrics
      kubernetes_sd_configs:
        - role: service
          cluster_ip: 10.100.200.92
          namespaces:
            names:
              default
  recording_rules.yml: |
    {}
  rules: |
    {}
kind: ConfigMap
metadata:
  creationTimestamp: "2020-06-08T09:26:38Z"
  labels:
    app: prometheus
    chart: prometheus-11.3.0
    component: server
    heritage: Helm
    release: prometheus
  name: prometheus-server
  namespace: prometheus
  uid: 8fadb17a-f5c5-4f9d-a931-fa1f77684847

Здесь clusterIP - это IP-адрес, назначенный моей службе для раскрытия развертывания.

Мой файл deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 2
  strategy:
    type: RollingUpdate
  selector:
    matchLabels:
      name: myapp
  template:
    metadata:
      labels:
        name: myapp
    spec:
      containers:
        - image: IMAGE_URL:BUILD_NUMBER
          name: myapp
          resources:
              limits:
                cpu: "1000m"
                memory: "2400Mi"
              requests:
                cpu: "500m"
                memory: "2000Mi"
          imagePullPolicy: IfNotPresent
          ports:
              - containerPort: 5000
                name: myapp

Мой файл service.yaml, который раскрывает развертывание

apiVersion: v1
kind: Service
metadata:
  name: myapp
spec:
  selector:
    deploy: staging
    name: myapp
  type: ClusterIP
  ports:
    - port: 80
      targetPort: 5000
      protocol: TCP

Есть ли какой-нибудь другой / эффективный способ настроить таргетинг моего приложения на сбор показателей, дайте мне знать. Спасибо

1 Ответ

1 голос
/ 22 июня 2020

Это то, что я использую, чтобы включить очистку Prometheus внутри кластера.

В конфигурации очистки у меня есть этот фрагмент:

      - job_name: 'kubernetes-pods'
        kubernetes_sd_configs:
          - role: pod
        relabel_configs:
          - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
            action: keep
            regex: true
          - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
            action: replace
            target_label: __metrics_path__
            regex: (.+)
          - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
            action: replace
            regex: ([^:]+)(?::\d+)?;(\d+)
            replacement: $1:$2
            target_label: __address__
          - action: labelmap
            regex: __meta_kubernetes_pod_label_(.+)
          - source_labels: [__meta_kubernetes_namespace]
            action: replace
            target_label: kubernetes_namespace
          - action: labeldrop
            regex: '(kubernetes_pod|app_kubernetes_io_instance|app_kubernetes_io_name|instance)'

Это взято непосредственно из значений по умолчанию для диаграммы шлема Prometheus: https://github.com/helm/charts/blob/master/stable/prometheus/values.yaml#L1452

Это дает команду Prometheus очистить каждый модуль, для которого задана аннотация: prometheus.io/scrape: "true". С помощью этих аннотаций в модуле pod вы можете затем настроить порт и путь очистки:

prometheus.io/path: "/metrics"
prometheus.io/port: "9090"

Таким образом, вам нужно будет изменить свой deployment.yaml, чтобы указать эти аннотации :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 2
  strategy:
    type: RollingUpdate
  selector:
    matchLabels:
      name: myapp
  template:
    metadata:
      labels:
        name: myapp
    annotations:
      prometheus.io/scrape: "true"
      prometheus.io/port: "<enter port of pod to scrape>"
      prometheus.io/path: "<enter path to scrape>"
    spec:
      containers:
        - image: IMAGE_URL:BUILD_NUMBER
...
...