> 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/monitoring-nginx.md).

# Мониторинг Nginx

## Ссылки

Шпаргалка по установке и настройке различных Prometheus exporter на Linux: [www.dmosk.ru](https://www.dmosk.ru/miniinstruktions.php?mini=exporter-prometheus)

## Информация

Для подключения Linux сервера к мониторингу Prometheus необходимо выполнить несколько шагов:

1. На Linux сервер установить NGINX exporter
2. В настройках Prometheus подключить target со ссылкой на Linux сервер который необходимо мониторить

## Установка NGINX exporter

Действия выполняются на сервере NGINX

### Установка  NGINX exporter

<details>

<summary>Выполнить следующие действия</summary>

Для сборки исходника нам нужны пакеты go, git и curl. Устанавливаем их командой:

```bash
sudo su
mkdir $HOME/tmp
cd $HOME/tmp
# Установить пакеты
apt install git golang curl
# Скачиваем проект nginx-prometheus-exporter:
git clone https://github.com/nginxinc/nginx-prometheus-exporter.git
# Переходим в загруженный каталог:
cd nginx-prometheus-exporter
# Выполняем сборку:
go build
# В результате будет создан бинарник nginx-prometheus-exporter. Перенесем его в /usr/local/bin:
mv nginx-prometheus-exporter /usr/local/bin/
# Выходим из каталога проекта и удаляем загруженную ранее папку:
cd ../ && rm -rf nginx-prometheus-exporter
```

</details>

### Настройка NGINX

<details>

<summary>Выполнить следующие действия</summary>

Для получения статистики и метрик от nginx, необходимо настроить встроенную страницу **server-status**. Находим незанятый порт на сервере, например:

```
ss -tunlp | grep :8080
```

*\* данной командой мы увидим, занят ли порт 8080.*

Если система возвращает пустую строку, значит порт свободен и мы будем использовать его. Если порт занят, пробуем поискать другие незанятые порты. Дальне по инструкции предполагается, что мы настраиваем 8080.

Создаем конфигурационный файл nginx:

```bash
nano /etc/nginx/conf.d/stats.conf
```

Содержимое файла `/etc/nginx/conf.d/stats.conf`

```
server {
    listen 8080;
    server_name _;
    access_log off;
    location /server-status {
        stub_status on;
    }
}
```

Проверяем конфигурацию и применяем ее:

```bash
nginx -t
nginx -s reload
```

Должна заработает страница статистики. Можно проверить ее работоспособность командой:

```bash
curl http://127.0.0.1:8080/server-status
```

Мы можем увидеть что-то на подобие:

```
Active connections: 320 
server accepts handled requests
 498121 498121 15945169 
Reading: 0 Writing: 1 Waiting: 319 
```

</details>

### Запуск и проверка NGINX exporter

<details>

<summary>Выполнить следующие действия</summary>

Создаем файл для автозапуска экспортера:

```bash
nano /etc/systemd/system/nginx_exporter.service
```

Содержимое файла `/etc/systemd/system/nginx_exporter.service`:

```
[Unit]
Description=Node Exporter Service
After=network.target

[Service]
User=nodeusr
Group=nodeusr
Type=simple
ExecStart=/usr/local/bin/nginx-prometheus-exporter -nginx.scrape-uri=http://127.0.0.1:8080/server-status
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target
```

Создаем учетную запись **nodeusr**:

```bash
# Создаем пользователя nodeusr:
useradd --no-create-home --shell /bin/false nodeusr
# Задаем владельца для исполняемого файла:
chown -R nodeusr:nodeusr /usr/local/bin/nginx-prometheus-exporter
```

Включаем:

```bash
# Разрешаем автозапуск:
systemctl enable nginx_exporter
# Запускаем службу:
systemctl start nginx_exporter

# Или если нужно перезапустить
systemctl daemon-reload
systemctl restart nginx_exporter
```

Можно проверить статус службы и прослушивание порта 9113:

```bash
systemctl status nginx_exporter
ss -tunlp | grep :9113
```

Также можно получить набор метрик:

```bash
curl 127.0.0.1:9113/metrics
```

<http://192.168.3.0:9113/metrics>

</details>

## Настройка Prometheus

### Регистрация target

В файле `argocd\env-prod\apps\monitoring\prometheus\values.yaml`&#x20;

<details>

<summary>Изменения в файле <code>argocd\env-prod\apps\monitoring\prometheus\values.yaml</code></summary>

Добавить ip сервера в секцию&#x20;

prometheus\prometheusSpec\additionalScrapeConfigs

```yaml
    additionalScrapeConfigs: |
      - job_name: 'nginx_exporter'
        scrape_interval: 5s
        static_configs:
          - targets:
            - 192.168.3.0:9113
            - <ip>:9100
```

Сделать коммит в репозиторий GitHub с обновлением файла `values.yaml`&#x20;

Дождаться, когда Argo CD обновить приложение k8s-prometheus.

</details>

### Настройка оповещений

{% hint style="info" %}
**ПРОРАБОТАТЬ!!!**
{% endhint %}

## Настройка Grafana

### Импорт дашбордов из Argo CD

В файле `argocd\env-prod\apps\monitoring\grafana\values.yaml` добавить

<details>

<summary>Изменения в файле <code>argocd\env-prod\apps\monitoring\grafana\values.yaml</code></summary>

```yaml
dashboardProviders:
  dashboardproviders4.yaml:
    apiVersion: 1
    providers:
    - name: 'nginx'
      orgId: 1
      folder: 'Nginx'
      type: file
      disableDeletion: false
      editable: true
      options:
        path: /var/lib/grafana/dashboards/nginx
        foldersFromFilesStructure: false

dashboards:
  nginx: {}
```

Сделать коммит в репозиторий GitHub с обновлением файла `values.yaml`&#x20;

Дождаться, когда Argo CD обновить приложение k8s-grafana.

</details>

#### Дашборды

<details>

<summary>Описание импортируемых дашбордов</summary>

</details>

### Ручной импорт дашбордов по ID

В Grafana: Dashboards → Import → вставь ID  → выбери источник Prometheus.

Каталог в дашбордах: `Nginx`

#### Дашборды

<details>

<summary>Описание импортируемых дашбордов</summary>

Пока нет

</details>

### Ручной импорт дашбордов из файлов json

В Grafana: Dashboards → Import → выбрать JSON файл  → выбрать  источник Prometheus.

Каталог в дашбордах: `Nginx`

#### Дашборды

<details>

<summary>Описание импортируемых дашбордов</summary>

#### NGINX

Ссылка на файл: [github.com](https://github.com/utenkov-maxim/grafana-dashboards/blob/main/nginx/dashboard.json)

Альтернативная ссылка на файл: [github.com](https://github.com/nginx/nginx-prometheus-exporter/blob/main/grafana/dashboard.json)

<figure><img src="/files/A0LmFN2bbZQf6r75w0Q3" alt=""><figcaption></figcaption></figure>

</details>


---

# 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/monitoring-nginx.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.
