1
0
mirror of https://github.com/ManyakRus/telegram_loki.git synced 2024-12-12 09:33:50 +02:00

готово readme

This commit is contained in:
Nikitin Aleksandr 2023-10-13 16:40:52 +03:00
parent 835418f12b
commit 99545595c2
7 changed files with 128 additions and 67 deletions

11
.env_empty Normal file
View File

@ -0,0 +1,11 @@
TELEGRAM_APP_ID=
TELEGRAM_APP_HASH=
TELEGRAM_PHONE_FROM=
TELEGRAM_PHONE_SEND_TEST=
LOKI_URL=
GRAFANA_LOGIN=
GRAFANA_PASSWORD=
TELEGRAM_CHAT_NAME=

View File

@ -1,16 +0,0 @@
#filename file to create with .graphml extension
FILENAME_GRAPHML=
#table names have to image, regular expression format
INCLUDE_TABLES=
#table names have to not image, regular expression format
EXCLUDE_TABLES=
#database credentials
DB_HOST=
DB_NAME=
DB_SCHEME=
DB_PORT=
DB_USER=
DB_PASSWORD=

View File

@ -1,2 +1,52 @@
# telegram_loki
Send errors from logger LOKI to telegram messenger
Applications for sending logs with errors from the LOKI(GRAFANA) logger to the Telegram messenger
The LOKI logger has an inconvenient interface for searching errors in application logs,
and no one will look there every 5 minutes -
Therefore, it is necessary to automate the process of searching for errors in logs and notifying developers.
The application does:
1. Log in to grafana
2. Takes a list of services from the services.txt file
3. For each service, searches for LOKI logs with the text: error:,panic:,ERROR:,PANIC:
4. Found logs with errors are sent to the Telegram messenger
5. Repeats the search every 10 minutes
Installation procedure:
1. Compile this repository
make build
the telegram_loki file will appear in the bin folder
2. make a .env file with filled parameters:
TELEGRAM_APP_ID=
TELEGRAM_APP_HASH=
TELEGRAM_PHONE_FROM=
TELEGRAM_PHONE_SEND_TEST=
LOKI_URL=
GRAFANA_LOGIN=
GRAFANA_PASSWORD=
TELEGRAM_CHAT_NAME=
3. Fill in the settings/services.txt file
In json format write the service name in LOKI
and the name (login) of the programmer (optional)
sample:
{
"test-service1": "@DeveloperTelegramName"
}
3. Run the telegram_loki file
Source code in Golang language.
Tested on Linux Ubuntu
Readme from 10/13/2023
License:
Save information about the author and the site.
Made by Alexander Nikitin
https://github.com/ManyakRus/telegram_loki

View File

@ -15,7 +15,7 @@
<node id="n0">
<data key="d5">
<y:ShapeNode>
<y:Geometry height="26.0" width="136.0" x="-67.99999999999997" y="-213.0"/>
<y:Geometry height="26.0" width="136.0" x="-68.0" y="-13.0"/>
<y:Fill color="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="16" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="22.625" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="c" textColor="#000000" verticalTextPosition="bottom" visible="true" width="112.4765625" x="11.76171875" xml:space="preserve" y="1.6875">telegram_loki</y:NodeLabel>
@ -26,7 +26,7 @@
<node id="n1">
<data key="d5">
<y:ShapeNode>
<y:Geometry height="26.0" width="96.0" x="-48.0" y="-13.0"/>
<y:Geometry height="26.0" width="96.0" x="-247.7777626556525" y="-22.425791653849217"/>
<y:Fill color="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="16" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="22.625" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="c" textColor="#000000" verticalTextPosition="bottom" visible="true" width="80.03125" x="7.984375" xml:space="preserve" y="1.6875">Telegram</y:NodeLabel>
@ -34,14 +34,38 @@
</y:ShapeNode>
</data>
</node>
<edge id="e0" source="n0" target="n1">
<node id="n2">
<data key="d5">
<y:ShapeNode>
<y:Geometry height="26.0" width="56.0" x="171.7777626556525" y="-3.5742083461507637"/>
<y:Fill color="#FFFFFF" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="16" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="22.625" horizontalTextPosition="center" iconTextGap="4" modelName="internal" modelPosition="c" textColor="#000000" verticalTextPosition="bottom" visible="true" width="40.90625" x="7.546875" xml:space="preserve" y="1.6875">WEB</y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<edge id="e0" source="n0" target="n2">
<data key="d8" xml:space="preserve"><![CDATA[telegram_loki -> WEB]]></data>
<data key="d9">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="standard" target="standard"/>
<y:EdgeLabel alignment="center" bottomInset="0" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="8" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.625" horizontalTextPosition="center" iconTextGap="4" leftInset="0" modelName="centered" modelPosition="center" preferredPlacement="anywhere" ratio="0.5" rightInset="0" textColor="#000000" topInset="0" verticalTextPosition="bottom" visible="true" width="30.515625" x="36.631068827826255" xml:space="preserve" y="-6.864310668641444">
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e1" source="n0" target="n1">
<data key="d8" xml:space="preserve"><![CDATA[telegram_loki -> Telegram]]></data>
<data key="d9">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="standard" target="standard"/>
<y:EdgeLabel alignment="center" bottomInset="0" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="8" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.625" horizontalTextPosition="center" iconTextGap="4" leftInset="0" modelName="centered" modelPosition="center" preferredPlacement="anywhere" ratio="0.5" rightInset="0" textColor="#000000" topInset="0" verticalTextPosition="bottom" visible="true" width="30.515625" x="-15.257812500000012" xml:space="preserve" y="77.6875">
<y:EdgeLabel alignment="center" bottomInset="0" configuration="AutoFlippingLabel" distance="0.0" fontFamily="Dialog" fontSize="8" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.625" horizontalTextPosition="center" iconTextGap="4" leftInset="0" modelName="centered" modelPosition="center" preferredPlacement="anywhere" ratio="0.5" rightInset="0" textColor="#000000" topInset="0" verticalTextPosition="bottom" visible="true" width="30.515625" x="-57.146693827826255" xml:space="preserve" y="-11.288875475374182">
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

@ -1,61 +1,53 @@
Приложения для автоматического создания схемы таблиц и колонок в БД Postgres (ERD-diagram)
Приложения для отправки логов с ошибками из логгера LOKI(GRAFANA) в мессенджер Telegram
Есть много разных приложения для автоматического создания ERD-diagram,
однако они все отображают стрелки связей только до таблицы, а не до нужной колонки,
и не имеют возможности редактировать и обновлять отредактированную схему -
поэтому пришлось создать свой приложение.
В логгере LOKI неудобный интерфейс для поиска ошибок в логах приложений,
и никто не будет туда смотреть каждые 5 минут -
поэтому надо автоматизировать процесс поиска ошибок в логах и уведомление разработчикам.
Приложение умеет автоматически находить в ЬД и рисовать:
1. Все таблицы
2. Все колонки таблиц и типы
3. Стрелки взаимосвязи таблиц от колонки до колонки (foreign key)
4. Находит таблицы в старом имеющемся файле .graphml,
и располагает таблицы по таким же координатам X,Y
Приложение делает:
1. Логинится в grafana
2. Берёт список сервисов из файла services.txt
3. По каждому сервису ищет логи LOKI с текстом: error:,panic:,ERROR:,PANIC:
4. Найденные логи с ошибками присылает в Telegram мессенджер
5. Повторяет поиск каждые 10 минут
Полученный файл .graphml в бесплатном редакторе yED можно:
1. Экспортировать в рисунок .jpg
2. Редактировать
3. Автоматическая расстановка блоков
Образец выполнения (рисунки) можно найти в каталоге examples
Порядок установки:
1. Установить редактор файлов .graphml yEd (бесплатный)
https://www.yworks.com/products/yed/download
2. Скомпилировать этот репозиторий
1. Скомпилировать этот репозиторий
make build
в папке bin появится файл image_database
в папке bin появится файл telegram_loki
3. сделать файл .env с заполненными параметрами:
FILENAME_GRAPHML=
INCLUDE_TABLES=
EXCLUDE_TABLES=
DB_HOST=
DB_NAME=
DB_SCHEME=
DB_PORT=
DB_USER=
DB_PASSWORD=
2. сделать файл .env с заполненными параметрами:
TELEGRAM_APP_ID=
TELEGRAM_APP_HASH=
TELEGRAM_PHONE_FROM=
TELEGRAM_PHONE_SEND_TEST=
LOKI_URL=
GRAFANA_LOGIN=
GRAFANA_PASSWORD=
TELEGRAM_CHAT_NAME=
Запустить файл image_database
4. Открыть полученный файл .graphml в редакторе yEd
(все элементы сначала будут в центре экрана)
и выбратьв меню:
Tools - Remove Node Overlaps
- редактор yEd расположит все элементы схемы в оптимальном виде.
3. Заполнить файл settings/services.txt
В формате json написать имя сервиса в LOKI
и имя(логин) программиста (необязательно)
образец:
{
"test-service1": "@DeveloperTelegramName"
}
5. Экспортировать схему в картинку.
Выбрать в меню:
File - Export
3. Запустить файл telegram_loki
Исходный код на языке Golang.
Тестировал на Linux Ubuntu
Реадми от 14.09.2023
Реадми от 13.10.2023
Лицензия:
Сохранять информацию об авторе и сайте.
Сделал Александр Никитин
https://github.com/ManyakRus/image_database
https://github.com/ManyakRus/telegram_loki

View File

@ -1,5 +1,5 @@
{
"test_service1": "@DeveloperTelegramName",
"test_service2": "FirstName SecondName",
"test-service1": "@DeveloperTelegramName",
"test-service2": "FirstName SecondName",
"test-service3": "t.me/testservice_errors",
}