docs: update sysadmin/Monitoring/Gatus

main
Федоров Дмитрий 2024-08-08 14:53:37 +00:00 committed by Dmitriy Fedorov
parent 8730ac5fba
commit 15e2783cb3
1 changed files with 98 additions and 98 deletions

View File

@ -2,106 +2,106 @@
title: Gatus - просто мониторинг title: Gatus - просто мониторинг
description: description:
published: true published: true
date: 2024-08-08T14:51:46.417Z date: 2024-08-08T14:53:32.993Z
tags: мониторинг, gatus tags: мониторинг, gatus
editor: ckeditor editor: ckeditor
dateCreated: 2024-08-08T14:47:57.868Z dateCreated: 2024-08-08T14:47:57.868Z
--> -->
<p>У меня было очень много заметок про различные мониторинги. Кажется, что я уже про всё более-менее полезное что-то да писал. Оказалось, что нет. Расскажу про очередной небольшой и удобный мониторинг, который позволяет очень просто и быстро создать дашборд с зелёными и красными кнопками. Если зелёные, то всё ОК, если красные, то НЕ ОК. &nbsp;</p> <p>У меня было очень много заметок про различные мониторинги. Кажется, что я уже про всё более-менее полезное что-то да писал. Оказалось, что нет. Расскажу про очередной небольшой и удобный мониторинг, который позволяет очень просто и быстро создать дашборд с зелёными и красными кнопками. Если зелёные, то всё ОК, если красные, то НЕ ОК. &nbsp;</p>
<p>&nbsp;</p> <p>&nbsp;</p>
<p>Речь пойдёт про Gatus (https://github.com/TwiN/gatus). С его помощью очень удобно создавать Status Page. Сразу покажу, как это будет выглядеть:</p> <p>Речь пойдёт про Gatus (https://github.com/TwiN/gatus). С его помощью очень удобно создавать Status Page. Сразу покажу, как это будет выглядеть:</p>
<p>&nbsp;</p> <p>&nbsp;</p>
<p><a href="https://status.twin.sh">https://status.twin.sh</a></p> <p><a href="https://status.twin.sh">https://status.twin.sh</a></p>
<p>&nbsp;</p> <p>&nbsp;</p>
<p>И сразу же простой пример, как это настраивается. Там всё максимально просто и быстро. Мы будем проверять следующие условия:</p> <p>И сразу же простой пример, как это настраивается. Там всё максимально просто и быстро. Мы будем проверять следующие условия:</p>
<p>&nbsp;</p> <p>&nbsp;</p>
<p>◽️Подключение к сайту <a href="https://zabbix.com">zabbix.com </a>проходит успешно, а его IP равен 188.114.99.224. Так как этот домен резолвится в разные IP, можно будет увидеть, как срабатывает проверка.</p> <p>◽️Подключение к сайту <a href="https://zabbix.com">zabbix.com </a>проходит успешно, а его IP равен 188.114.99.224. Так как этот домен резолвится в разные IP, можно будет увидеть, как срабатывает проверка.</p>
<p>◽️Сайт <a href="https://github.com">github.com</a> отдаёт код 200 при подключении и содержит заголовок страницы GitHub: Lets build from here · GitHub. &nbsp;</p> <p>◽️Сайт <a href="https://github.com">github.com</a> отдаёт код 200 при подключении и содержит заголовок страницы GitHub: Lets build from here · GitHub. &nbsp;</p>
<p>◽️Сайт ya.ru отдаёт код 200 и имеет отклик менее 10 мс. На практике он будет больше, посмотрим, как срабатывает триггер. По этой проверке будет уведомление в Telegram.</p> <p>◽️Сайт ya.ru отдаёт код 200 и имеет отклик менее 10 мс. На практике он будет больше, посмотрим, как срабатывает триггер. По этой проверке будет уведомление в Telegram.</p>
<p>◽️Домен <a href="https://vk.com">vk.com</a> имеет сертификат со сроком истечения не менее 48 часов и делегирование домена не менее 720 часов. &nbsp;</p> <p>◽️Домен <a href="https://vk.com">vk.com</a> имеет сертификат со сроком истечения не менее 48 часов и делегирование домена не менее 720 часов. &nbsp;</p>
<p>&nbsp;</p> <p>&nbsp;</p>
<p>Специально подобрал разнообразные примеры, чтобы вы оценили возможности мониторинга. Я просто открыл документацию и сходу по ней всё сделал. Всё очень просто и понятно, особо разбираться не пришлось. Создаём конфигурационный файл для этих проверок:</p> <p>Специально подобрал разнообразные примеры, чтобы вы оценили возможности мониторинга. Я просто открыл документацию и сходу по ней всё сделал. Всё очень просто и понятно, особо разбираться не пришлось. Создаём конфигурационный файл для этих проверок:</p>
<pre><code class="language-plaintext"># mkdir gatus &amp;&amp; cd gatus <pre><code class="language-plaintext"># mkdir gatus &amp;&amp; cd gatus
# touch config.yaml # touch config.yaml
</code></pre> </code></pre>
<pre><code class="language-plaintext">alerting: <pre><code class="language-plaintext">alerting:
telegram: telegram:
token: "1393668911:AAHtEAKqxUH7ZpyX28R-wxKfvH1WR6-vdNw" token: "1393668911:AAHtEAKqxUH7ZpyX28R-wxKfvH1WR6-vdNw"
id: "210806260" id: "210806260"
endpoints: endpoints:
- name: Zabbix Connection - name: Zabbix Connection
url: "https://zabbix.com" url: "https://zabbix.com"
interval: 30s interval: 30s
conditions: conditions:
- "[CONNECTED] == true" - "[CONNECTED] == true"
- "[IP] == 188.114.99.224" - "[IP] == 188.114.99.224"
- name: Github Title - name: Github Title
url: "https://github.com" url: "https://github.com"
interval: 30s interval: 30s
conditions: conditions:
- "[STATUS] == 200" - "[STATUS] == 200"
- "[BODY] == pat(*&lt;title&gt;GitHub: Lets build from here · GitHub&lt;/title&gt;*)" - "[BODY] == pat(*&lt;title&gt;GitHub: Lets build from here · GitHub&lt;/title&gt;*)"
- name: Yandex response - name: Yandex response
url: "https://ya.ru" url: "https://ya.ru"
interval: 30s interval: 30s
conditions: conditions:
- "[STATUS] == 200" - "[STATUS] == 200"
- "[RESPONSE_TIME] &lt; 10" - "[RESPONSE_TIME] &lt; 10"
alerts: alerts:
- type: telegram - type: telegram
send-on-resolved: true send-on-resolved: true
- name: VK cert &amp; domain - name: VK cert &amp; domain
url: "https://vk.com" url: "https://vk.com"
interval: 5m interval: 5m
conditions: conditions:
- "[CERTIFICATE_EXPIRATION] &gt; 48h" - "[CERTIFICATE_EXPIRATION] &gt; 48h"
- "[DOMAIN_EXPIRATION] &gt; 720h" - "[DOMAIN_EXPIRATION] &gt; 720h"
</code></pre> </code></pre>
<p>Запускаем Docker контейнер и цепляем к нему этот файл:</p> <p>Запускаем Docker контейнер и цепляем к нему этот файл:</p>
<pre><code class="language-plaintext"># docker run -p 8080:8080 -d \ <pre><code class="language-plaintext"># docker run -p 8080:8080 -d \
--mount type=bind,source="$(pwd)"/config.yaml,target=/config/config.yaml \ --mount type=bind,source="$(pwd)"/config.yaml,target=/config/config.yaml \
--name gatus twinproduction/gatus --name gatus twinproduction/gatus
</code></pre> </code></pre>
<p>Идём по IP адресу сервера на порт 8080 и смотрим на свой мониторинг. Данные могут храниться в оперативной памяти, sqlite или postgresql базе. Если выберите последнее, то вот готовый docker-compose (https://github.com/TwiN/gatus/blob/master/.examples/docker-compose-postgres-storage/docker-compose.yml) для этого. По умолчанию данные хранятся в оперативной памяти и после перезапуска контейнера пропадают. &nbsp;</p> <p>Идём по IP адресу сервера на порт 8080 и смотрим на свой мониторинг. Данные могут храниться в оперативной памяти, sqlite или postgresql базе. Если выберите последнее, то вот готовый <a href="https://github.com/TwiN/gatus/blob/master/.examples/docker-compose-postgres-storage/docker-compose.yml">docker-compose</a> &nbsp;для этого. По умолчанию данные хранятся в оперативной памяти и после перезапуска контейнера пропадают. &nbsp;</p>
<pre><code class="language-plaintext">version: "3.9" <pre><code class="language-plaintext">version: "3.9"
services: services:
postgres: postgres:
image: postgres image: postgres
volumes: volumes:
- ./data/db:/var/lib/postgresql/data - ./data/db:/var/lib/postgresql/data
ports: ports:
- "5432:5432" - "5432:5432"
environment: environment:
- POSTGRES_DB=gatus - POSTGRES_DB=gatus
- POSTGRES_USER=username - POSTGRES_USER=username
- POSTGRES_PASSWORD=password - POSTGRES_PASSWORD=password
networks: networks:
- web - web
gatus: gatus:
image: twinproduction/gatus:latest image: twinproduction/gatus:latest
restart: always restart: always
ports: ports:
- "8080:8080" - "8080:8080"
environment: environment:
- POSTGRES_USER=username - POSTGRES_USER=username
- POSTGRES_PASSWORD=password - POSTGRES_PASSWORD=password
- POSTGRES_DB=gatus - POSTGRES_DB=gatus
volumes: volumes:
- ./config:/config - ./config:/config
networks: networks:
- web - web
depends_on: depends_on:
- postgres - postgres
networks: networks:
web:</code></pre> web:</code></pre>
<p>Штука простая и удобная. Меня не раз просили посоветовать что-то для простого дашборда с зелёными кнопками, когда всё нормально и красными, когда нет. Вот это идеальный вариант под такую задачу.</p> <p>Штука простая и удобная. Меня не раз просили посоветовать что-то для простого дашборда с зелёными кнопками, когда всё нормально и красными, когда нет. Вот это идеальный вариант под такую задачу.</p>
<p>Также с помощью этого мониторинга удобно сделать дашборд для мониторинга мониторингов, чтобы понимать, живы они или нет.</p> <p>Также с помощью этого мониторинга удобно сделать дашборд для мониторинга мониторингов, чтобы понимать, живы они или нет.</p>
<figure class="image"><img src="/sysadmin/img/gatus.png"></figure> <figure class="image"><img src="/sysadmin/img/gatus.png"></figure>
<p>&nbsp;</p> <p>&nbsp;</p>