> For the complete documentation index, see [llms.txt](https://utm-1.gitbook.io/utm-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://utm-1.gitbook.io/utm-docs/dokumentaciya/utm-it/resheniya/monitoring/prometheus/reshenie-problem.md).

# Решение проблем

## Решение проблемы с отсутствием данных в дашбордах etcd, Kubernetes / Controller Manager,  Kubernetes / Scheduler, Kubernetes / Proxy

{% hint style="info" %}
После установки Prometheus выяснилось, что Prometheus не собирает данные по следующим объектам кластера:

* etcd
* kube-scheduler
* kube-controller-manager
* kube-proxy

В результате в Grafana в соответствующих дашбордах выводится No data.

В результате возникают алерты и постоянные оповещения:

* Alert: etcdInsufficientMembers
* Alert: KubeSchedulerDown
* Alert: KubeControllerManagerDown
* Alert: KubeProxyDown

Как выяснилось при развертывании кластера через kubeadm данные объекты отрывают доступ к метрикам только с локального хоста 127.0.0.0 и не доступны из других хостов кластера.

Поэтому требуются дополнительные настройки для того, чтобы открыть доступ к метрикам этих объектов с других хостов кластера, чтобы prometheus мог считывать эти метрики.
{% endhint %}

### Ссылки

Prometheus не может собирать метрики Kubernetes: [stackoverflow.com](https://stackoverflow.com/questions/68409322/prometheus-cannot-scrape-kubernetes-metrics)

kube-prometheus /docs / kube-prometheus-on-kubeadm.md (<mark style="color:$primary;">основная инструкция</mark>): [github.com](https://github.com/prometheus-operator/kube-prometheus/blob/main/docs/kube-prometheus-on-kubeadm.md)

Запрос как решать проблему через yandex: [ya.ru](https://ya.ru/search/?text=prometheus+%D0%BD%D0%B5+%D0%B2%D0%B8%D0%B4%D0%B8%D1%82+%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D0%BA%D0%B8+%D0%B8%D0%B7+kube-controller-manager\&lr=10716)

kubeadm Configuration (v1beta4): [kubernetes.io](https://kubernetes.io/docs/reference/config-api/kubeadm-config.v1beta4/)

Все прокси-серверы Kubernetes отключены — Prometheus Operator: [stackoverflow.com](https://stackoverflow.com/questions/60734799/all-kubernetes-proxy-targets-down-prometheus-operator)

### Что нужно сделать

#### Подключение к prometheus компонентов etcd, kube-controller-manager, kube-scheduler

**Первый шаг** : отредактируйте configmap с помощью следующей команды:

```bash
kubectl edit -n kube-system cm/kubeadm-config
```

Установить значения:

* controllerManager.extraArgs.bind-address = "0.0.0.0"
* scheduler.extraArgs.bind-address = "0.0.0.0"
* etcd.local.extraArgs.listen-metrics-urls = "<http://0.0.0.0:2381>"

Пример файла конфигурации:

```yaml
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
controlPlaneEndpoint: "192.168.1.173:6443"
apiServer:
  extraArgs:
    authorization-mode: "Node,RBAC"
controllerManager:
  extraArgs:
  - bind-address: "0.0.0.0"
scheduler:
  extraArgs:
  - bind-address: "0.0.0.0"
certificatesDir: "/etc/kubernetes/pki"
etcd:
  # one of local or external
  local:
    dataDir: "/var/lib/etcd"
    extraArgs:
    - listen-metrics-urls: "http://0.0.0.0:2381"
kubernetesVersion: "v1.23.1"
networking:
  dnsDomain: "cluster.local"
  serviceSubnet: "10.96.0.0/12"
imageRepository: "registry.k8s.io"
```

**Второй шаг** : измените адрес прослушивания kube-controller-manager и kube-scheduler в дополнение к предыдущему изменению kubelet.

На каждом master узле выполнить команду:

```
sed -e "s/- --bind-address=127.0.0.1/- --bind-address=0.0.0.0/" -i /etc/kubernetes/manifests/kube-controller-manager.yaml
sed -e "s/- --bind-address=127.0.0.1/- --bind-address=0.0.0.0/" -i /etc/kubernetes/manifests/kube-scheduler.yaml
sed -e "s/- --listen-metrics-urls=http:\/\/127.0.0.1:2381/- --listen-metrics-urls=http:\/\/0.0.0.0:2381/" -i /etc/kubernetes/manifests/etcd.yaml
```

**Третий шаг (НЕ ДЕЛАТЬ!!!)**: ***ПРИМЕЧАНИЕ:*** Пожалуйста, прочтите [здесь,](https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-upgrade/#cmd-upgrade-node) чтобы понять команду обновления, ***прежде чем*** применять ее к любому интересующему вас кластеру, поскольку она также может обновить версии компонентов кластера, если вы только что не выполнили обновление :)

На каждом узле выполнить команду:

```bash
kubeadm upgrade node
```

{% hint style="danger" %}
Эта команда завершилась с ошибкой! Нужно отдельно разбираться с командой kubeadm upgrade node

Для решения поставленной задачи достаточно выполнить Второй шаг
{% endhint %}

#### Подключение к prometheus компонентов kube-proxy

**Первый шаг** : отредактировать конфигурацию kube-proxy

```bash
kubectl edit cm/kube-proxy -n kube-system
```

Внести изменения в параметр metricsBindAddress

Установить седующее значение

```yaml
metricsBindAddress: "0.0.0.0:10249"
```

**Второй шаг** : удалить поды kube-proxy

```bash
kubectl delete pod -l k8s-app=kube-proxy -n kube-system
```

После удаления kubernates их сразу заново создаст на основе обновленной конфигурации.

Посмотреть список подов можно командой:

```bash
kubectl get pod -l k8s-app=kube-proxy -n kube-system
```

## Решение проблемы с отсутствием данных в дашборде Grafana Overview

### Ссылки

\[kube-prometheus-stack] нет данных в панели обзора Grafana: [github.com](https://github.com/prometheus-community/helm-charts/issues/3800?ysclid=mhwcndebhe533610656)

### Решение проблемы

Посмотреть список servicemonitors

```bash
kubectl get servicemonitors.monitoring.coreos.com -n monitoring
```

В списке найти строчку prometheus-stack-grafana или с аналогичным названием

Посмотреть описание этого servicemonitors

```bash
kubectl describe servicemonitors.monitoring.coreos.com prometheus-stack-grafana -n monitoring
```

В выводе убедиться что в списке меток отсутствует метка release=prometheus-stack

```
Namespace:    monitoring
Labels:       app.kubernetes.io/instance=prometheus-stack
              app.kubernetes.io/name=grafana
              app.kubernetes.io/version=12.2.1
              helm.sh/chart=grafana-10.1.4
```

Для сравнения можно посмотреть аналогичное описание для другого servicemonitors

```bash
kubectl describe servicemonitors.monitoring.coreos.com prometheus-stack-kube-prom-kube-proxy -n monitoring
```

Тут в списке меток есть метка release=prometheus-stack

```
Namespace:    monitoring
Labels:       app=kube-prometheus-stack-kube-proxy
              app.kubernetes.io/instance=prometheus-stack
              app.kubernetes.io/managed-by=Helm
              app.kubernetes.io/part-of=kube-prometheus-stack
              app.kubernetes.io/version=79.4.1
              chart=kube-prometheus-stack-79.4.1
              heritage=Helm
              release=prometheus-stack
```

Далее необходимо внести изменения в файл values.yaml на основе которого Argo CD выполнял развертывание prometheus.

Необходимо указать:

```yaml
grafana:
    labels:
      release: prometheus-stack
```

После передеплоя приложения через Argo CD в дашборде Grafana Overview должны появиться данные.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://utm-1.gitbook.io/utm-docs/dokumentaciya/utm-it/resheniya/monitoring/prometheus/reshenie-problem.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
