171 lines
6.3 KiB
Markdown
171 lines
6.3 KiB
Markdown
# Настройка Vector для отправки логов в Gotify
|
||
|
||
Эта инструкция описывает, как установить Vector, настроить его для чтения JSON-логов из файла `/opt/org_ccalm_main/logs/ccalm.log`, фильтрации строк с уровнем `ERROR` и отправки уведомлений в Gotify.
|
||
|
||
---
|
||
## 0. ✅ Подключаемся к инфраструктуре
|
||
|
||
```sh
|
||
ssh igor@ccalm.org -p 2200
|
||
```
|
||
|
||
## Предварительные требования
|
||
- ОС: Ubuntu/Debian (для других ОС уточните, чтобы адаптировать команды).
|
||
- Файл логов: `/opt/org_ccalm_main/logs/ccalm.log` с JSON-строками (поля `level` и `message`).
|
||
- Gotify: Доступный сервер Gotify с URL и токеном (например, `https://gotify.example.com/message?token=<your-token>`).
|
||
- Доступ к терминалу с правами `sudo`.
|
||
|
||
|
||
## Шаг 1: Установка Vector
|
||
|
||
Пробуем скачать deb пакет с сайта
|
||
```sh
|
||
curl -L https://packages.timber.io/vector/0.43.1/vector_0.43.1-1_amd64.deb -o vector_0.43.1-1_amd64.deb &&
|
||
sudo dpkg -i vector_0.43.1-1_amd64.deb &&
|
||
sudo apt-get install -f &&
|
||
vector --version
|
||
```
|
||
|
||
## Шаг 2: Создание конфигурации Vector
|
||
Vector использует YAML для конфигурации. Настроим чтение логов, фильтрацию `ERROR` и отправку в Gotify.
|
||
|
||
1. Создайте файл конфигурации `/etc/vector/vector.yaml`:
|
||
```sh
|
||
cd /etc/vector &&
|
||
sudo tee vector.yaml > /dev/null <<'EOF'
|
||
data_dir: "/var/lib/vector"
|
||
|
||
sources:
|
||
ccalm_logs:
|
||
type: file
|
||
include:
|
||
- /opt/org_ccalm_main/logs/ccalm.log
|
||
read_from: beginning
|
||
|
||
transforms:
|
||
parse_json:
|
||
type: remap
|
||
inputs:
|
||
- ccalm_logs
|
||
source: |
|
||
structured, err = parse_json(.message)
|
||
if err != null {
|
||
abort
|
||
}
|
||
merged, err = merge(., structured)
|
||
if err != null {
|
||
abort
|
||
}
|
||
. = merged
|
||
|
||
filter_errors:
|
||
type: filter
|
||
inputs:
|
||
- parse_json
|
||
condition: '.level == "ERROR"'
|
||
|
||
format_telegram_json:
|
||
type: remap
|
||
inputs:
|
||
- filter_errors
|
||
source: |
|
||
msg, err = string(.message)
|
||
if err != null {
|
||
msg = "Unable to parse message"
|
||
}
|
||
.message = "{\"title\":\"CCALM Main Error Log\",\"message\":\"ERROR: " + msg + "\"}"
|
||
|
||
|
||
sinks:
|
||
gotify:
|
||
type: http
|
||
inputs:
|
||
- filter_errors
|
||
uri: "https://gotify.geovizor.top:8443/message?token=AYmcpr43YtPKDmZ"
|
||
method: post
|
||
encoding:
|
||
codec: json
|
||
template: '{"title":"CCALM Main Error Log","message":"Test message 00","priority":5}'
|
||
request:
|
||
headers:
|
||
Content-Type: "application/json"
|
||
Host: "gotify.geovizor.top"
|
||
Content-Length: "{{ content_length }}"
|
||
tls:
|
||
verify_certificate: false
|
||
verify_hostname: false
|
||
EOF
|
||
```
|
||
|
||
Пробую отправку через curl
|
||
```sh
|
||
curl -X POST -k "https://gotify.geovizor.top:8443/message?token=AYmcpr43YtPKDmZ" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"message": "Test message", "priority": 5}'
|
||
```
|
||
|
||
|
||
Проверяем что gotify работает:
|
||
```sh
|
||
curl -k -X POST -H "Content-Type: application/json" -H "Host: gotify.geovizor.top" -d '{"message":"Test message 00","priority":5}' --http1.1 https://gotify.geovizor.top:8443/message?token=AYmcpr43YtPKDmZ -v
|
||
```
|
||
|
||
### Объяснение конфигурации
|
||
- **Source (`ccalm_logs`)**: Читает логи из файла, парсит JSON, поддерживает многострочные логи.
|
||
- **Transform (`filter_errors`)**: Фильтрует логи с `level: "ERROR"`.
|
||
- **Sink (`gotify`)**: Отправляет отфильтрованные логи в Gotify через HTTP POST.
|
||
|
||
## Шаг 3: Проверка конфигурации
|
||
Проверьте корректность YAML:
|
||
```sh
|
||
vector --config /etc/vector/vector.yaml validate
|
||
```
|
||
Ожидаемый вывод: `Configuration is valid`.
|
||
|
||
## Шаг 4: Запуск Vector
|
||
### Тестовый запуск (для отладки)
|
||
```sh
|
||
sudo vector --config /etc/vector/vector.yaml
|
||
```
|
||
|
||
### Запуск как сервиса
|
||
1. Включите и запустите сервис:
|
||
```sh
|
||
sudo systemctl enable vector
|
||
sudo systemctl start vector
|
||
```
|
||
2. Проверьте статус:
|
||
```sh
|
||
sudo systemctl status vector
|
||
```
|
||
|
||
|
||
|
||
## Шаг 5: Проверка отправки в Gotify
|
||
1. Убедитесь, что Gotify доступен по указанному URL.
|
||
2. Добавьте тестовую строку лога в `/opt/org_ccalm_main/logs/ccalm.log`:
|
||
```sh
|
||
echo '{"level": "ERROR", "message": "Database connection failed", "timestamp": "2025-05-18T12:28:00Z"}' | sudo tee -a /opt/org_ccalm_main/logs/ccalm.log
|
||
```
|
||
3. Проверьте Gotify (веб-интерфейс или приложение) — должно прийти уведомление с заголовком "CCALM Log Error" и сообщением "Database connection failed".
|
||
|
||
## Шаг 6: Отладка
|
||
- Логи Vector: `/var/log/vector/vector.log` или stdout (в тестовом режиме).
|
||
- Проверьте логи при проблемах:
|
||
```sh
|
||
cat /var/log/vector/vector.log
|
||
```
|
||
|
||
## Дополнительные настройки
|
||
- **Права доступа к файлу логов**:
|
||
```sh
|
||
sudo chown vector:vector /opt/org_ccalm_main/logs/ccalm.log
|
||
sudo chmod 644 /opt/org_ccalm_main/logs/ccalm.log
|
||
```
|
||
- **Если JSON-формат отличается**: Если поле `level` называется иначе (например, `log_level`), замените `.level` на `.log_level` в `condition`.
|
||
- **HTTP вместо HTTPS**: Если Gotify использует HTTP, замените `https://` на `http://` в `uri`.
|
||
|
||
## Примечания
|
||
- Убедитесь, что Gotify настроен и токен действителен.
|
||
- Если логи не отправляются, проверьте сетевую доступность Gotify и правильность URL/токена.
|
||
- Для чтения только новых логов удалите `read_from: beginning` в конфигурации. |