Blame
d7f80f | Mayekkuzu | 2025-04-03 18:35:29 | 1 | # Uptime-Kuma |
2 | ||||
3 | Uptime Kuma - небольшая и простая система мониторинга ресурсов, сервисов, игровых серверов. Поддерживает ответы кодов HTTP, ответы JSON, позволяет мониторить Docker-сервисы. Так же есть поддержка мониторинга игровых серверов в Steam. Не требует особых навыков и пердолинга мониторинга как в Zabbix. Если необходимо организовать публичную страницу для пользователей и отправку в Telegram уведомлений о сбое - неплохая штука. |
|||
4 | ||||
5 | ## Установка в Docker-Compose |
|||
6 | > [!NOTE] |
|||
7 | > Подразумевается что у нас уже установлен Docker и Docker-Compose, если нет - [Читаем это](https://y2z.ru/Linux/Docker) |
|||
8 | ||||
9 | Создадим произвольную папку, пусть это будет uptime-kuma, далее создаем docker-compose.yaml с содержимым: |
|||
10 | ||||
11 | ```yaml |
|||
12 | version: "3.8" |
|||
13 | ||||
14 | services: |
|||
15 | uptime-kuma: |
|||
16 | image: louislam/uptime-kuma:latest |
|||
17 | container_name: uptime-kuma |
|||
18 | restart: always |
|||
19 | ports: |
|||
20 | - "3001:3001" # Маппим порт 3001 на порт хоста 3001. Если нужно чтобы браузер отзывался на 80 порт, то меняем на "80:3001" |
|||
21 | volumes: |
|||
22 | - ./data:/app/data # Папка в котором будут храниться логи и конфигурация. Создастся автоматически |
|||
23 | environment: |
|||
24 | - TZ=UTC # Обозначаем таймзону |
|||
25 | - UMASK=0022 # Права на файлы |
|||
26 | networks: |
|||
27 | - kuma_network # Обозначаем имя сети (может быть любым) |
|||
28 | healthcheck: |
|||
29 | test: ["CMD", "curl", "-f", "http://localhost:3001"] |
|||
30 | interval: 30s |
|||
31 | retries: 3 |
|||
32 | start_period: 10s |
|||
33 | timeout: 5s |
|||
34 | logging: |
|||
35 | driver: "json-file" |
|||
36 | options: |
|||
37 | max-size: "10m" |
|||
38 | max-file: "3" |
|||
39 | ||||
40 | networks: |
|||
41 | kuma_network: |
|||
42 | driver: bridge |
|||
43 | ``` |
|||
44 | ||||
45 | Запускаем через `docker-compose up -d`. Если у вас стоит docker-compose v2, то `docker compose up -d` |
|||
46 | ## Мониторим сервис по JSON |
|||
47 | К примеру, есть радиостанция на базе Icecast. Icecast предоставляет возможность выводить json статус вещания, к примеру: |
|||
48 | ```json |
|||
49 | { |
|||
50 | "station": { |
|||
51 | "id": 1, |
|||
52 | "name": "SCUF FM", |
|||
53 | "shortcode": "scuf_fm", |
|||
54 | "description": "Я просто хочу отдохнуть от трудовых будней", |
|||
55 | "frontend": "icecast" |
|||
56 | } |
|||
57 | "is_online": true, |
|||
58 | } |
|||
59 | ``` |
|||
60 | Будем мониторить наличие "true" в параметре "is_online". Если слово будет отличаться или изчезнет, то мониторинг вернет ошибку. Таким образом создаем новый монитор, где: |
|||
61 | - Monitor Type: HTTP(s) - Json Query |
|||
62 | - Friendly Name: Любое |
|||
63 | - URL: https://your-service.com/api/station |
|||
64 | - Json query: is_online |
|||
65 | - Expected Value: true |
|||
66 | - Heartbeat Interval: 60 (Или 120. В секундах) |
|||
67 | - Request Timeout: 48 (Достаточно, можно меньше или больше, в секундах) |
|||
68 | В разделе HTTP Options: |
|||
69 | - Method: GET |
|||
70 | - Body Encoding: JSON |
|||
71 | В разделе Advanced: |
|||
72 | - Accepted Status Codes: 200-299 |
|||
9fd660 | Mayekkuzu | 2025-04-03 18:45:36 | 73 | Опционально - Description и Monitor Groups на свой вкус, если необходимо обьединить сервисы общей сущностью. Сохраняем: |
74 |  |
|||
75 | ||||
76 | > [!NOTE] |
|||
77 | > Если healtcheck сервиса производится средствами ping (icmp) то пинг у него меньше чем запрос и обработка JSON/HTML, потому как суммируется время получения и обработки данных. Так же следует обратить внимание, если удаленный сервер блокирует частое обращение к HTML/JSON, то предусмотрите вайтлист IP-сервиса мониторинга или увеличьте частоту опроса healthcheck. В моем случае раз в несколько запросов я получал ошибку **timeout of 48000ms exceeded**. |