Scrape
job – еще один способ описать конечную точку для сборки метрик в Prometheus.
Ниже приведен пример задания дополнительного scrape job на примере сбора метрик у Drone.io
(Drone-CI) посредством Prometheus, отображения графиков в Grafana и развертывание всего этого в окружении Kubernetes с помощью Helm.
Drone
-
Для установки Drone CI мы будем использовать следующий репозиторий чартов: https://github.com/helm/charts/tree/master/stable/drone . Drone имеет встроенную поддержу экспорта метрик по URL : */metrics.
-
Чтобы включить эту функцию, необходимо задать разрешение в
values.yaml
файле Drone:
metrics:
prometheus:
enabled: true
- Для авторизации используется token. Я изменил deployment-server.yaml файл для того, чтобы создать нового пользователя типа “machine”. Внимание! У меня в примере он создается вместо (и вместе) с администратором, потому как реализована внешняя авторизация через LDAP. Так что учтите это, если вам нужна отдельная учетная запись администратора в Drone.
- name: DRONE_USER_CREATE
value: username:system,machine:true,admin:true,token:{{ .Values.server.systemToken }}
- Для задания токена я добавил новый параметр в values.yaml файл Drone:
server:
systemToken: GeN6RatemE
Prometheus
-
Мы будем использовать Prometheus из этого репозитария: https://github.com/helm/charts/tree/master/stable/prometheus-operator
-
Нам необходимо описать конфигурацию scrape в values.yaml файле Prometheus:
prometheus:
prometheusSpec:
# scrape configuration
additionalScrapeConfigs:
- job_name: "monitoring/drone"
bearer_token: {{ .Values.drone.token }}
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_app]
action: keep
regex: drone
- source_labels: [__meta_kubernetes_pod_container_port_number]
action: keep
regex: 80
Вы можере видеть, что задание описано как pod
Kubernetes. Выборка конечной точки входа осуществляется посредством фильтра лейблов Kubernetes. Это методанные: app
и port_number
. Вы можете найти их из описания вашего pod-а, командой kubectl describe pod
или на странице Prometheus /service-discovery.
Grafana
Для автоматической установки наборов графиков (dashboard) в grafana я использую скрипт: prometheus-operator/hack/sync_grafana_dashboards.py с небольшими изменениями. В частности, я добавляю необходимые мне json-файлы с настройками dashboard-ов:
...
- 'source': 'https://raw.githubusercontent.com/etcd-io/etcd/master/Documentation/op-guide/grafana.json',
- 'destination': '../templates/grafana/dashboards',
+ 'source': 'https://raw.githubusercontent.com/carldanley/radium-grafana-dashboards/master/drone-ci.json',
+ 'destination': '../templates/grafana/dashboards/custom',
'type': 'json',
'min_kubernetes': '1.10.0-0',
'max_kubernetes': '1.16.0-0'
},
...
Теперь вам надо запустить этот скрипт для скачивания и конвертации json-файла в yaml-файл типа ConfigMap для Helm. После чего вы можете разворачивать (обновлять) prometheus-operator с grafana и поддержкой drone-ci.