6.3 KiB
6.3 KiB
Настройка Vector для отправки логов в Gotify
Эта инструкция описывает, как установить Vector, настроить его для чтения JSON-логов из файла /opt/org_ccalm_main/logs/ccalm.log, фильтрации строк с уровнем ERROR и отправки уведомлений в Gotify.
0. ✅ Подключаемся к инфраструктуре
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 пакет с сайта
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.
- Создайте файл конфигурации
/etc/vector/vector.yaml:
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
curl -X POST -k "https://gotify.geovizor.top:8443/message?token=AYmcpr43YtPKDmZ" \
-H "Content-Type: application/json" \
-d '{"message": "Test message", "priority": 5}'
Проверяем что gotify работает:
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:
vector --config /etc/vector/vector.yaml validate
Ожидаемый вывод: Configuration is valid.
Шаг 4: Запуск Vector
Тестовый запуск (для отладки)
sudo vector --config /etc/vector/vector.yaml
Запуск как сервиса
- Включите и запустите сервис:
sudo systemctl enable vector
sudo systemctl start vector
- Проверьте статус:
sudo systemctl status vector
Шаг 5: Проверка отправки в Gotify
- Убедитесь, что Gotify доступен по указанному URL.
- Добавьте тестовую строку лога в
/opt/org_ccalm_main/logs/ccalm.log:
echo '{"level": "ERROR", "message": "Database connection failed", "timestamp": "2025-05-18T12:28:00Z"}' | sudo tee -a /opt/org_ccalm_main/logs/ccalm.log
- Проверьте Gotify (веб-интерфейс или приложение) — должно прийти уведомление с заголовком "CCALM Log Error" и сообщением "Database connection failed".
Шаг 6: Отладка
- Логи Vector:
/var/log/vector/vector.logили stdout (в тестовом режиме). - Проверьте логи при проблемах:
cat /var/log/vector/vector.log
Дополнительные настройки
- Права доступа к файлу логов:
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в конфигурации.