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
![](./json_monitor.png)
75
76
> [!NOTE]
77
> Если healtcheck сервиса производится средствами ping (icmp) то пинг у него меньше чем запрос и обработка JSON/HTML, потому как суммируется время получения и обработки данных. Так же следует обратить внимание, если удаленный сервер блокирует частое обращение к HTML/JSON, то предусмотрите вайтлист IP-сервиса мониторинга или увеличьте частоту опроса healthcheck. В моем случае раз в несколько запросов я получал ошибку **timeout of 48000ms exceeded**.