Как собирать метрики с приложений, расположенных вне кластера? | How do I collect metrics from applications running outside of the cluster? |
|
|
Пример |
|
Метрики приложения доступны без TLS, по адресу | An example |
yaml apiVersion: v1 kind: Service metadata: name: my-app namespace: my-namespace labels: prometheus.deckhouse.io/custom-target: my-app spec: ports:
| Application metrics are freely available (no TLS involved) at |
Как добавить дополнительные dashboard’ы в вашем проекте? | yaml apiVersion: v1 kind: Service metadata: name: my-app namespace: my-namespace labels: prometheus.deckhouse.io/custom-target: my-app spec: ports:
|
Добавление пользовательских dashboard’ов для Grafana в Deckhouse реализовано с помощью подхода Infrastructure as a Code.
Чтобы ваш dashboard появился в Grafana, необходимо создать в кластере специальный ресурс — | How do I create custom Grafana dashboards? |
Пример: | Custom Grafana dashboards can be added to the project using the Infrastructure as a Code approach.
To add your dashboard to Grafana, create the dedicated |
yaml apiVersion: deckhouse.io/v1 kind: GrafanaDashboardDefinition metadata: name: my-dashboard spec: folder: My folder # Папка, в которой в Grafana будет отображаться ваш dashboard. definition: | { “annotations”: { “list”: [ { “builtIn”: 1, “datasource”: “– Grafana –”, “enable”: true, “hide”: true, “iconColor”: “rgba(0, 211, 255, 1)”, “limit”: 100, … | An example: |
Важно! Системные и добавленные через GrafanaDashboardDefinition dashboard’ы нельзя изменить через интерфейс Grafana. | yaml apiVersion: deckhouse.io/v1 kind: GrafanaDashboardDefinition metadata: name: my-dashboard spec: folder: My folder # The folder where the custom dashboard will be located. definition: | { “annotations”: { “list”: [ { “builtIn”: 1, “datasource”: “– Grafana –”, “enable”: true, “hide”: true, “iconColor”: “rgba(0, 211, 255, 1)”, “limit”: 100, … |
Как добавить алерты и/или recording-правила для вашего проекта? |
|
Для добавления алертов существует специальный ресурс — | How do I add alerts and/or recording rules? |
Параметры:
| The |
Пример: | Parameters:
|
yaml apiVersion: deckhouse.io/v1 kind: CustomPrometheusRules metadata: name: my-rules spec: groups:
| An example: |
Как подключить дополнительные data source для Grafana? | yaml apiVersion: deckhouse.io/v1 kind: CustomPrometheusRules metadata: name: my-rules spec: groups:
|
Для подключения дополнительных data source к Grafana существует специальный ресурс — | How do I provision additional Grafana data sources? |
Параметры ресурса подробно описаны в документации к Grafana. Тип ресурса смотрите в документации по конкретному datasource. | The |
Пример: | A detailed description of the resource parameters is available in the Grafana documentation. |
yaml apiVersion: deckhouse.io/v1 kind: GrafanaAdditionalDatasource metadata: name: another-prometheus spec: type: prometheus access: Proxy url: https://another-prometheus.example.com/prometheus basicAuth: true basicAuthUser: foo jsonData: timeInterval: 30s httpMethod: POST secureJsonData: basicAuthPassword: bar | See the datasource type in the documentation for the specific datasource. |
Как обеспечить безопасный доступ к метрикам? | An example: |
Для обеспечения безопасности настоятельно рекомендуем использовать | yaml apiVersion: deckhouse.io/v1 kind: GrafanaAdditionalDatasource metadata: name: another-prometheus spec: type: prometheus access: Proxy url: https://another-prometheus.example.com/prometheus basicAuth: true basicAuthUser: foo jsonData: timeInterval: 30s httpMethod: POST secureJsonData: basicAuthPassword: bar |
Пример безопасного сбора метрик с приложения, расположенного в кластере | How do I enable secure access to metrics? |
Для настройки защиты метрик приложения с использованием | To enable secure access to metrics, we strongly recommend using kube-rbac-proxy. |
| An example of collecting metrics securely from an application inside a cluster |
yamlapiVersion: v1 kind: ServiceAccount metadata: name: rbac-proxy-test — apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: rbac-proxy-test roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: d8:rbac-proxy subjects:
| Do the following to set up application metrics protection via the |
|
|
| yamlapiVersion: v1 kind: ServiceAccount metadata: name: rbac-proxy-test — apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: rbac-proxy-test roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: d8:rbac-proxy subjects:
|
yamlapiVersion: v1 kind: ConfigMap metadata: name: rbac-proxy-config-test namespace: rbac-proxy-test data: config-file.yaml: |+ authorization: resourceAttributes: namespace: default apiVersion: v1 resource: services subresource: proxy name: rbac-proxy-test |
|
|
|
| yamlapiVersion: v1 kind: ConfigMap metadata: name: rbac-proxy-config-test namespace: rbac-proxy-test data: config-file.yaml: |+ authorization: resourceAttributes: namespace: default apiVersion: v1 resource: services subresource: proxy name: rbac-proxy-test |
yamlapiVersion: v1 kind: Service metadata: name: rbac-proxy-test labels: prometheus.deckhouse.io/custom-target: rbac-proxy-test spec: ports:
|
|
|
|
yamlapiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: rbac-proxy-test-client rules:
| yamlapiVersion: v1 kind: Service metadata: name: rbac-proxy-test labels: prometheus.deckhouse.io/custom-target: rbac-proxy-test spec: ports:
|
После шага 4 метрики вашего приложения должны появиться в Prometheus. |
|
Пример безопасного сбора метрик с приложения, расположенного вне кластера | yamlapiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: rbac-proxy-test-client rules:
|
Предположим, что есть доступный через интернет сервер, на котором работает | After step 4, your application’s metrics should become available in Prometheus. |
Требования:
| An example of collecting metrics securely from an application outside a cluster |
Выполните следующие шаги:
| Suppose there is a server exposed to the Internet on which the |
yamlapiVersion: v1 kind: ServiceAccount metadata: name: prometheus-external-endpoint-server-01 namespace: d8-service-accounts — apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: prometheus-external-endpoint rules:
| Requirements:
|
| Follow these steps:
|
| yamlapiVersion: v1 kind: ServiceAccount metadata: name: prometheus-external-endpoint-server-01 namespace: d8-service-accounts — apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: prometheus-external-endpoint rules:
|
|
|
shell
docker run –network host -d -v ${PWD}/.kube/config:/config quay.io/brancz/kube-rbac-proxy:v0.14.0 –secure-listen-address=0.0.0.0:8443 |
|
|
|
| shell
docker run –network host -d -v ${PWD}/.kube/config:/config quay.io/brancz/kube-rbac-proxy:v0.14.0 –secure-listen-address=0.0.0.0:8443 |
yamlapiVersion: v1 kind: Service metadata: name: prometheus-external-endpoint-server-01 labels: prometheus.deckhouse.io/custom-target: prometheus-external-endpoint-server-01 spec: ports:
|
|
Как добавить Alertmanager? |
|
Создайте custom resource | yamlapiVersion: v1 kind: Service metadata: name: prometheus-external-endpoint-server-01 labels: prometheus.deckhouse.io/custom-target: prometheus-external-endpoint-server-01 spec: ports:
|
Пример: | How do I add Alertmanager? |
yaml apiVersion: deckhouse.io/v1alpha1 kind: CustomAlertmanager metadata: name: webhook spec: type: Internal internal: route: groupBy: [‘job’] groupWait: 30s groupInterval: 5m repeatInterval: 12h receiver: ‘webhook’ receivers:
| Create a custom resource |
Подробно о всех параметрах можно прочитать в описании custom resource CustomAlertmanager. | Example: |
Как добавить внешний дополнительный Alertmanager? | yaml apiVersion: deckhouse.io/v1alpha1 kind: CustomAlertmanager metadata: name: webhook spec: type: Internal internal: route: groupBy: [‘job’] groupWait: 30s groupInterval: 5m repeatInterval: 12h receiver: ‘webhook’ receivers:
|
Создайте custom resource | Refer to the description of the CustomAlertmanager custom resource for more information about the parameters. |
Пример FQDN Alertmanager: | How do I add an additional Alertmanager? |
yaml apiVersion: deckhouse.io/v1alpha1 kind: CustomAlertmanager metadata: name: my-fqdn-alertmanager spec: external: address: https://alertmanager.mycompany.com/myprefix type: External | Create a custom resource |
Пример Alertmanager с Kubernetes service: | FQDN Alertmanager example: |
yaml apiVersion: deckhouse.io/v1alpha1 kind: CustomAlertmanager metadata: name: my-service-alertmanager spec: external: service: namespace: myns name: my-alertmanager path: /myprefix/ type: External | yaml apiVersion: deckhouse.io/v1alpha1 kind: CustomAlertmanager metadata: name: my-fqdn-alertmanager spec: external: address: https://alertmanager.mycompany.com/myprefix type: External |
Подробно о всех параметрах можно прочитать в описании custom resource CustomAlertmanager. | Alertmanager with a Kubernetes service: |
Как в Alertmanager игнорировать лишние алерты? | yaml apiVersion: deckhouse.io/v1alpha1 kind: CustomAlertmanager metadata: name: my-service-alertmanager spec: external: service: namespace: myns name: my-alertmanager path: /myprefix/ type: External |
Решение сводится к настройке маршрутизации алертов в вашем Alertmanager. | Refer to the description of the CustomAlertmanager Custom Resource for more information about the parameters. |
Потребуется: | How do I ignore unnecessary alerts in Alertmanager? |
| The solution comes down to configuring alert routing in the Alertmanager. |
Ниже приведены примеры настройки | You will need to: |
Чтобы получать только алерты с лейблами |
|
yaml receivers: Получатель, определенный без параметров, будет работать как “/dev/null”.
| Below are samples for configuring |
Чтобы получать все алерты, кроме | Receive all alerts with labels |
yaml receivers: Получатель, определенный без параметров, будет работать как “/dev/null”.
| yaml receivers: The parameterless receiver is similar to “/dev/null”.
|
С подробным описанием всех параметров можно ознакомиться в официальной документации. | Receive all alerts except for |
Почему нельзя установить разный scrapeInterval для отдельных таргетов? | yaml receivers: The parameterless receiver is similar to “/dev/null”.
|
Наиболее полный ответ на этот вопрос дает разработчик Prometheus Brian Brazil. Если коротко, разные scrapeInterval’ы принесут следующие проблемы:
| A detailed description of all parameters can be found in the official documentation. |
Наиболее разумное значение для scrapeInterval находится в диапазоне 10–60 секунд. | Why can’t different scrape Intervals be set for individual targets? |
Как ограничить потребление ресурсов Prometheus? | The Prometheus developer Brian Brazil provides, probably, the most comprehensive answer to this question. In short, different scrapeIntervals are likely to cause the following complications:
|
Чтобы избежать ситуаций, когда VPA запрашивает для Prometheus или Longterm Prometheus ресурсов больше, чем есть на выделенном для этого узле, можно явно ограничить VPA с помощью параметров модуля:
| The most appropriate value for scrapeInterval is in the range of 10-60s. |
Как настроить ServiceMonitor или PodMonitor для работы с Prometheus? | How do I limit Prometheus resource consumption? |
Добавьте лейбл | To avoid situations when VPA requests more resources for Prometheus or Longterm Prometheus than those available on the corresponding node, you can explicitly limit VPA using module parameters:
|
Пример: | How do I set up a ServiceMonitor or PodMonitor to work with Prometheus? |
yamlapiVersion: v1 kind: Namespace metadata: name: frontend labels: prometheus.deckhouse.io/monitor-watcher-enabled: “true” — apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: example-app namespace: frontend labels: prometheus: main spec: selector: matchLabels: app: example-app endpoints:
| Add the |
Как настроить Probe для работы с Prometheus? | Example: |
Добавьте лейбл | yamlapiVersion: v1 kind: Namespace metadata: name: frontend labels: prometheus.deckhouse.io/monitor-watcher-enabled: “true” — apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: example-app namespace: frontend labels: prometheus: main spec: selector: matchLabels: app: example-app endpoints:
|
Пример: | How do I set up a Probe to work with Prometheus? |
yamlapiVersion: v1 kind: Namespace metadata: name: frontend labels: prometheus.deckhouse.io/probe-watcher-enabled: “true” — apiVersion: monitoring.coreos.com/v1 kind: Probe metadata: labels: app: prometheus component: probes prometheus: main name: cdn-is-up namespace: frontend spec: interval: 30s jobName: httpGet module: http_2xx prober: path: /probe scheme: http url: blackbox-exporter.blackbox-exporter.svc.cluster.local:9115 targets: staticConfig: static:
| Add the |
Как настроить PrometheusRules для работы с Prometheus? | Example: |
Добавьте в namespace, в котором находятся PrometheusRules, лейбл | yamlapiVersion: v1 kind: Namespace metadata: name: frontend labels: prometheus.deckhouse.io/probe-watcher-enabled: “true” — apiVersion: monitoring.coreos.com/v1 kind: Probe metadata: labels: app: prometheus component: probes prometheus: main name: cdn-is-up namespace: frontend spec: interval: 30s jobName: httpGet module: http_2xx prober: path: /probe scheme: http url: blackbox-exporter.blackbox-exporter.svc.cluster.local:9115 targets: staticConfig: static:
|
Пример: | How do I set up a PrometheusRules to work with Prometheus? |
yamlapiVersion: v1 kind: Namespace metadata: name: frontend labels: prometheus.deckhouse.io/rules-watcher-enabled: “true” | Add the label |
Как увеличить размер диска | Example: |
| yamlapiVersion: v1 kind: Namespace metadata: name: frontend labels: prometheus.deckhouse.io/rules-watcher-enabled: “true” |
Как получить информацию об алертах в кластере? | How to expand disk size |
Информацию об активных алертах можно получить не только в веб-интерфейсе Grafana/Prometheus, но и в CLI. Это может быть полезным, если у вас есть только доступ к API-серверу кластера и нет возможности открыть веб-интерфейс Grafana/Prometheus. |
|
Выполните следующую команду для получения списка алертов в кластере: | How to get information about alerts in a cluster? |
shell kubectl get clusteralerts | You can get information about active alerts not only in the Grafana/Prometheus web interface but in the CLI. This can be useful if you only have access to the cluster API server and there is no way to open the Grafana/Prometheus web interface. |
Пример: | Run the following command to get cluster alerts: |
shell | shell kubectl get clusteralerts |
kubectl get clusteralerts NAME ALERT SEVERITY AGE LAST RECEIVED STATUS 086551aeee5b5b24 ExtendedMonitoringDeprecatatedAnnotation 4 3h25m 38s firing 226d35c886464d6e ExtendedMonitoringDeprecatatedAnnotation 4 3h25m 38s firing 235d4efba7df6af4 D8SnapshotControllerPodIsNotReady 8 5d4h 44s firing 27464763f0aa857c D8PrometheusOperatorPodIsNotReady 7 5d4h 43s firing ab17837fffa5e440 DeadMansSwitch 4 5d4h 41s firing | Example: |
Выполните следующую команду для просмотра конкретного алерта: | shell |
shell
kubectl get clusteralerts | kubectl get clusteralerts NAME ALERT SEVERITY AGE LAST RECEIVED STATUS 086551aeee5b5b24 ExtendedMonitoringDeprecatatedAnnotation 4 3h25m 38s firing 226d35c886464d6e ExtendedMonitoringDeprecatatedAnnotation 4 3h25m 38s firing 235d4efba7df6af4 D8SnapshotControllerPodIsNotReady 8 5d4h 44s firing 27464763f0aa857c D8PrometheusOperatorPodIsNotReady 7 5d4h 43s firing ab17837fffa5e440 DeadMansSwitch 4 5d4h 41s firing |
Пример: | Run the following command to view a specific alert: |
shell | shell
kubectl get clusteralerts |
kubectl get clusteralerts 235d4efba7df6af4 -o yaml alert: description: | The recommended course of action:
| Example: |
Помните о специальном алерте | shell |
Как добавить дополнительные эндпоинты в scrape config? | kubectl get clusteralerts 235d4efba7df6af4 -o yaml alert: description: | The recommended course of action:
|
Добавьте в namespace, в котором находится ScrapeConfig, лейбл | Remember the special alert |
Пример: | How do I add additional endpoints to a scrape config? |
yamlapiVersion: v1 kind: Namespace metadata: name: frontend labels: prometheus.deckhouse.io/scrape-configs-watcher-enabled: “true” | Add the label |
Добавьте ScrapeConfig, который имеет обязательный лейбл | Example: |
yaml apiVersion: monitoring.coreos.com/v1alpha1 kind: ScrapeConfig metadata: name: example-scrape-config namespace: frontend labels: prometheus: main spec: honorLabels: true staticConfigs:
| yamlapiVersion: v1 kind: Namespace metadata: name: frontend labels: prometheus.deckhouse.io/scrape-configs-watcher-enabled: “true” |
Add the ScrapeConfig with the required label | |
yaml apiVersion: monitoring.coreos.com/v1alpha1 kind: ScrapeConfig metadata: name: example-scrape-config namespace: frontend labels: prometheus: main spec: honorLabels: true staticConfigs:
| |