Подключение Prometheus к сторонней Grafana
У каждого ingress-nginx-controller есть сертификаты, при указании которых в качестве клиентских будет разрешено подключение к Prometheus. Все, что нужно, — создать дополнительный Ingress-ресурс.
В приведенном ниже примере предполагается, что Secret example-com-tls уже существует в namespace d8-monitoring.
Имена для Ingress my-prometheus-api и Secret my-basic-auth-secret указаны для примера. Замените их на более подходящие для вас.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-prometheus-api
namespace: d8-monitoring
annotations:
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: my-basic-auth-secret
nginx.ingress.kubernetes.io/app-root: /graph
nginx.ingress.kubernetes.io/configuration-snippet: |
proxy_ssl_certificate /etc/nginx/ssl/client.crt;
proxy_ssl_certificate_key /etc/nginx/ssl/client.key;
proxy_ssl_protocols TLSv1.2;
proxy_ssl_session_reuse on;
spec:
ingressClassName: nginx
rules:
- host: prometheus-api.example.com
http:
paths:
- backend:
service:
name: prometheus
port:
name: https
path: /
pathType: ImplementationSpecific
tls:
- hosts:
- prometheus-api.example.com
secretName: example-com-tls
---
apiVersion: v1
kind: Secret
metadata:
name: my-basic-auth-secret
namespace: d8-monitoring
type: Opaque
data:
# Строка basic-auth хешируется с помощью htpasswd.
auth: Zm9vOiRhcHIxJE9GRzNYeWJwJGNrTDBGSERBa29YWUlsSDkuY3lzVDAK # foo:bar
Добавьте data source в Grafana:
В качестве URL необходимо указать https://prometheus-api.<домен-вашего-кластера>**.

-
Basic-авторизация не является надежной мерой безопасности. Рекомендуется ввести дополнительные меры безопасности, например указать аннотацию
nginx.ingress.kubernetes.io/whitelist-source-range. -
Из-за необходимости создания Ingress-ресурса в системном пространстве имён подключение таким способом не рекомендуется. DKP не гарантирует сохранение работоспособности данной схемы подключения в связи с его активными постоянными обновлениями.
-
Этот Ingress-ресурс может быть использован для доступа к Prometheus API не только для Grafana, но и для других интеграций, например, для федерации Prometheus.
Подключение стороннего приложения к Prometheus
Подключение к Prometheus защищено с помощью kube-rbac-proxy. Для подключения создайте ServiceAccount с необходимыми правами.
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: app
namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: app:prometheus-access
rules:
- apiGroups: ["monitoring.coreos.com"]
resources: ["prometheuses/http"]
resourceNames: ["main", "longterm"]
verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: app:prometheus-access
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: app:prometheus-access
subjects:
- kind: ServiceAccount
name: app
namespace: default
Выполните запрос, используя команду curl:
apiVersion: batch/v1
kind: Job
metadata:
name: app-curl
namespace: default
spec:
template:
metadata:
name: app-curl
spec:
serviceAccountName: app
containers:
- name: app-curl
image: curlimages/curl:7.69.1
command: ["sh", "-c"]
args:
- >-
curl -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" -k -f
https://prometheus.d8-monitoring:9090/api/v1/query_range?query=up\&start=1584001500\&end=1584023100\&step=30
restartPolicy: Never
backoffLimit: 4
Job должен завершиться успешно.
Сбор метрик через шлюз (Pushgateway)
Prometheus, находящийся в основе системы мониторинга DKP, преимущественно использует pull-модель для сбора метрик. При таком подходе происходит опрос экспортеров метрик со стороны DKP. Когда применение pull-модели затруднено, например, для сервисов без постоянного сетевого интерфейса, можно использовать сбор метрик через шлюз (Pushgateway). Pushgateway позволяет таким задачам самим отправлять метрики, которые затем могут быть собраны Prometheus. Важно отметить, что Pushgateway может стать единой точкой отказа и узким местом в системе. Как отправлять метрики из приложения в Pushgateway можно узнать в документации Prometheus.
Пример настройки сбора метрик через шлюз (Pushgateway):
-
Включите и настройте модуль
prometheus-pushgateway.Включить модуль можно в веб-интерфейсе (Deckhouse Console), или с помощью следующей команды:
d8 platform module enable prometheus-pushgateway -
Укажите названия шлюзов в параметре
instancesмодуляprometheus-pushgatewayчерез веб-интерфейс, или с помощью следующей команды:d8 k edit mc prometheus-pushgatewayПример конфигурации модуля:
apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: prometheus-pushgateway spec: version: 1 enabled: true settings: instances: - first - second - anotherАдрес экземпляра PushGateway с именем
firstиз контейнера пода будет:http://first.kube-prometheus-pushgateway:9091. -
Проверьте отправку метрик.
Пример отправки метрики через curl:
echo "test_metric{env="dev"} 3.14" | curl --data-binary @- http://first.kube-prometheus-pushgateway:9091/metrics/job/myapp -
Проверьте что метрика появилась в системе мониторинга. Она будет доступна через 30 секунд после сбора данных.
Пример PromQL запроса:
test_metric{container="prometheus-pushgateway", env="dev", exported_job="myapp", instance="10.244.1.155:9091", job="prometheus-pushgateway", pushgateway="prometheus-pushgateway", tier="cluster"} 3.14
Удаление метрик из шлюза (Pushgateway)
Пример удаления всех метрик группы {instance="10.244.1.155:9091",job="myapp"} через curl:
curl -X DELETE http://first.kube-prometheus-pushgateway:9091/metrics/job/myapp/instance/10.244.1.155:9091
Обратите внимание, что PushGateway хранит полученные метрики в памяти. При рестарте пода PushGateway все метрики будут утеряны.