Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
| software:fluent-bit-loki-grafana:fluent-bit:docker-swarm-2 [2025/11/26 00:35] – mirocow | software:fluent-bit-loki-grafana:fluent-bit:docker-swarm-2 [2025/12/06 03:35] (текущий) – mirocow | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | ====== Обработка | + | ====== Обработка логов |
| === fluent-bit.conf === | === fluent-bit.conf === | ||
| Строка 23: | Строка 23: | ||
| Parser | Parser | ||
| Refresh_Interval | Refresh_Interval | ||
| + | Ignore_Older | ||
| Docker_Mode | Docker_Mode | ||
| - | Docker_Mode_Flush 4 | ||
| Tag | Tag | ||
| - | Tag_Regex | + | Tag_Regex |
| Mem_Buf_Limit | Mem_Buf_Limit | ||
| Skip_Long_Lines | Skip_Long_Lines | ||
| Строка 32: | Строка 32: | ||
| DB.sync | DB.sync | ||
| Storage.Type | Storage.Type | ||
| - | Read_from_Head | + | Read_from_Head |
| - | # Парсинг JSON логов GitLab | + | # Только для |
| - | [FILTER] | + | # [INPUT] |
| - | Name parser | + | # Name tail |
| - | | + | # |
| - | Key_Name | + | # Parser |
| - | Parser | + | # |
| - | | + | # |
| - | | + | # |
| + | # | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | # | ||
| - | # Метаданные Docker | + | # Фильтруем пустые |
| [FILTER] | [FILTER] | ||
| - | name | + | name |
| match | match | ||
| - | | + | |
| - | | + | |
| + | Exclude | ||
| # Извлекаем сырой лог | # Извлекаем сырой лог | ||
| Строка 55: | Строка 63: | ||
| match | match | ||
| copy log raw_log | copy log raw_log | ||
| + | copy exception.backtrace exception_backtrace | ||
| + | copy exception.class exception_class | ||
| + | copy exception.message exception_message | ||
| - | # Фильтруем пустые | + | # Очищаем docker.* - оставляем ТОЛЬКО нужные поля |
| [FILTER] | [FILTER] | ||
| - | name | + | name |
| match | match | ||
| - | Exclude | ||
| - | Exclude | ||
| - | Exclude | ||
| - | Exclude | ||
| - | # Обработка многострочных логов GitLab | + | whitelist_key |
| + | whitelist_key | ||
| + | whitelist_key | ||
| + | whitelist_key | ||
| + | whitelist_key | ||
| + | whitelist_key | ||
| + | |||
| + | whitelist_key | ||
| + | whitelist_key | ||
| + | whitelist_key | ||
| + | whitelist_key | ||
| + | whitelist_key | ||
| + | whitelist_key | ||
| + | whitelist_key | ||
| + | |||
| + | # | ||
| + | # FILTERS | ||
| + | # | ||
| [FILTER] | [FILTER] | ||
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | parser |
| + | reserve_data | ||
| - | # Парсеры для специфичных форматов | ||
| [FILTER] | [FILTER] | ||
| name parser | name parser | ||
| Строка 78: | Строка 103: | ||
| key_name | key_name | ||
| parser | parser | ||
| + | reserve_data | ||
| + | |||
| + | [FILTER] | ||
| + | name parser | ||
| + | match | ||
| + | key_name | ||
| + | parser | ||
| reserve_data | reserve_data | ||
| Строка 91: | Строка 123: | ||
| match | match | ||
| key_name | key_name | ||
| - | parser | + | parser |
| + | reserve_data | ||
| + | |||
| + | [FILTER] | ||
| + | name parser | ||
| + | match | ||
| + | key_name | ||
| + | parser | ||
| reserve_data | reserve_data | ||
| Строка 101: | Строка 140: | ||
| reserve_data | reserve_data | ||
| - | # Остальные парсеры | + | [FILTER] |
| + | name parser | ||
| + | match | ||
| + | key_name | ||
| + | parser | ||
| + | reserve_data | ||
| + | [FILTER] | ||
| + | name parser | ||
| + | match | ||
| + | key_name | ||
| + | parser | ||
| + | reserve_data | ||
| + | Preserve_Key | ||
| + | [FILTER] | ||
| + | name parser | ||
| + | match | ||
| + | key_name | ||
| + | parser | ||
| + | reserve_data | ||
| + | |||
| + | [FILTER] | ||
| + | name parser | ||
| + | match | ||
| + | key_name | ||
| + | parser | ||
| + | reserve_data | ||
| + | |||
| + | [FILTER] | ||
| + | name parser | ||
| + | match | ||
| + | key_name | ||
| + | parser | ||
| + | reserve_data | ||
| - | # Структуризация распарсенных полей | + | # Структуризация распарсенных полей |
| [FILTER] | [FILTER] | ||
| name nest | name nest | ||
| Строка 119: | Строка 190: | ||
| wildcard | wildcard | ||
| wildcard | wildcard | ||
| + | wildcard | ||
| + | wildcard | ||
| + | wildcard | ||
| + | wildcard | ||
| wildcard | wildcard | ||
| wildcard | wildcard | ||
| wildcard | wildcard | ||
| wildcard | wildcard | ||
| - | wildcard | + | wildcard |
| - | wildcard | + | |
| - | wildcard | + | |
| - | wildcard | + | |
| nest_under | nest_under | ||
| - | # Копируем метаданные | + | # |
| + | # FILTERS | ||
| + | # | ||
| + | |||
| + | # Метаданные Docker | ||
| + | [FILTER] | ||
| + | name lua | ||
| + | match | ||
| + | script | ||
| + | call enrich_with_docker_metadata | ||
| + | |||
| + | # Копируем метаданные | ||
| [FILTER] | [FILTER] | ||
| name modify | name modify | ||
| Строка 136: | Строка 219: | ||
| copy docker.container_started started | copy docker.container_started started | ||
| copy docker.container_name container_name | copy docker.container_name container_name | ||
| + | copy docker.container_name service_name | ||
| copy docker.container_id container_id | copy docker.container_id container_id | ||
| copy docker.state state | copy docker.state state | ||
| copy docker.stream stream | copy docker.stream stream | ||
| + | copy docker.line_id line_id | ||
| + | |||
| copy log _raw | copy log _raw | ||
| copy parsed_data _parsed | copy parsed_data _parsed | ||
| + | # copy exception_class _class | ||
| + | # copy exception_message _message | ||
| + | # copy exception_backtrace _backtrace | ||
| - | | + | copy docker.label_project project |
| - | | + | copy docker.label_service service |
| - | copy docker.label_compose_service compose_service | + | copy docker.label_logging |
| - | + | copy docker.label_logging_jobname | |
| - | # docker swarm | + | |
| - | copy docker.Label_stack_name stack_name | + | |
| - | copy docker.Label_service_name service_name | + | |
| - | copy docker.Label_service_id service_id | + | |
| - | copy docker.Label_task_name task_name | + | |
| - | copy docker.Label_task_id task_id | + | |
| - | copy docker.Label_node_id node_id | + | |
| - | + | ||
| - | # Labels | + | |
| - | copy docker.Label_logging | + | |
| - | copy docker.Label_logging_jobname | + | |
| # Структурируем через nest | # Структурируем через nest | ||
| Строка 174: | Строка 252: | ||
| set | set | ||
| set | set | ||
| - | set | ||
| - | set | ||
| # Перетагиваем только логи с enabled logging | # Перетагиваем только логи с enabled logging | ||
| Строка 181: | Строка 257: | ||
| name rewrite_tag | name rewrite_tag | ||
| match | match | ||
| - | rule $logging ^enabled$ data.$container_name.$TAG | + | rule $logging ^enabled$ data.$container_id |
| - | # Очищаем data.* для GitLab | ||
| [FILTER] | [FILTER] | ||
| name record_modifier | name record_modifier | ||
| match | match | ||
| + | |||
| + | whitelist_key | ||
| whitelist_key | whitelist_key | ||
| - | whitelist_key | + | whitelist_key |
| + | whitelist_key | ||
| + | whitelist_key | ||
| + | |||
| + | whitelist_key | ||
| + | whitelist_key | ||
| + | whitelist_key | ||
| + | whitelist_key | ||
| + | whitelist_key | ||
| + | whitelist_key | ||
| + | whitelist_key | ||
| + | |||
| + | whitelist_key | ||
| + | whitelist_key | ||
| + | whitelist_key | ||
| whitelist_key | whitelist_key | ||
| - | whitelist_key | + | whitelist_key |
| - | whitelist_key | + | |
| whitelist_key | whitelist_key | ||
| - | whitelist_key | + | whitelist_key |
| - | whitelist_key | + | whitelist_key |
| whitelist_key | whitelist_key | ||
| - | whitelist_key | + | whitelist_key |
| - | whitelist_key | + | whitelist_key |
| - | whitelist_key | + | whitelist_key |
| - | whitelist_key | + | |
| - | + | ||
| - | # docker compose | + | |
| - | whitelist_key | + | |
| - | whitelist_key | + | |
| - | + | ||
| - | # docker swarm | + | |
| - | whitelist_key | + | |
| - | whitelist_key | + | |
| - | whitelist_key | + | |
| - | whitelist_key | + | |
| - | whitelist_key | + | |
| - | whitelist_key | + | |
| [OUTPUT] | [OUTPUT] | ||
| Строка 218: | Строка 295: | ||
| host loki | host loki | ||
| port 3100 | port 3100 | ||
| - | labels | + | labels |
| - | label_keys | + | label_keys |
| line_format | line_format | ||
| auto_kubernetes_labels off | auto_kubernetes_labels off | ||
| - | drop_single_key | ||
| - | remove_keys | ||
| - | # OUTPUT | + | # Только |
| # [OUTPUT] | # [OUTPUT] | ||
| # | # | ||
| Строка 232: | Строка 307: | ||
| </ | </ | ||
| - | === parsers_multiline.conf === | + | === parsers.conf === |
| <code ini> | <code ini> | ||
| + | # Базовый парсер для Docker JSON логов | ||
| [PARSER] | [PARSER] | ||
| Name docker | Name docker | ||
| Строка 242: | Строка 318: | ||
| Time_Keep | Time_Keep | ||
| + | # Nginx access логи | ||
| [PARSER] | [PARSER] | ||
| - | Name | + | Name |
| - | Format | + | Format |
| - | Time_Key | + | Regex |
| - | Time_Format %Y-%m-%dT%H:%M:%S.%LZ | + | Time_Key |
| - | Time_Keep | + | Time_Format %d/%b/%Y:%H:%M:%S %z |
| - | # GitLab | + | # Gitlab |
| [PARSER] | [PARSER] | ||
| Name gitlab_json | Name gitlab_json | ||
| Format | Format | ||
| + | # Time_Key | ||
| + | Time_Keep | ||
| + | |||
| + | # GitLab Registry логи | ||
| + | [PARSER] | ||
| + | Name gitlab_registry | ||
| + | Format | ||
| + | Regex | ||
| Time_Key | Time_Key | ||
| Time_Format %Y-%m-%dT%H: | Time_Format %Y-%m-%dT%H: | ||
| Строка 261: | Строка 346: | ||
| Name sidekiq_json | Name sidekiq_json | ||
| Format | Format | ||
| - | Time_Key | + | |
| - | Time_Format %Y-%m-%dT%H: | + | |
| Time_Keep | Time_Keep | ||
| - | # Nginx access | + | # Nextcloud Apache-style |
| [PARSER] | [PARSER] | ||
| - | Name | + | Name |
| Format | Format | ||
| - | Regex | + | Regex |
| - | Time_Key | + | Time_Key |
| + | Time_Format %d/ | ||
| + | Time_Keep | ||
| + | |||
| + | # Apache access логи | ||
| + | [PARSER] | ||
| + | Name apache_access | ||
| + | Format | ||
| + | Regex ^(?<remote_ip>[^ ]*) - - \[(?< | ||
| + | Time_Key | ||
| Time_Format %d/ | Time_Format %d/ | ||
| + | |||
| + | # MySQL error логи | ||
| + | [PARSER] | ||
| + | Name mysql_error | ||
| + | Format | ||
| + | Regex | ||
| + | Time_Key | ||
| + | Time_Format %Y-%m-%dT%H: | ||
| + | Time_Keep | ||
| + | |||
| + | # MySQL slow query логи | ||
| + | [PARSER] | ||
| + | Name mysql_slow | ||
| + | Format | ||
| + | Regex ^# Time: (?< | ||
| + | Time_Key | ||
| + | Time_Format %Y-%m-%dT%H: | ||
| Time_Keep | Time_Keep | ||
| Строка 278: | Строка 388: | ||
| Name postgresql | Name postgresql | ||
| Format | Format | ||
| - | Regex | + | Regex |
| - | Time_Key | + | Time_Key |
| - | Time_Format %Y-%m-%d %H:%M:%S %Z | + | Time_Format %Y-%m-%d %H:%M:%S.%L %Z |
| Time_Keep | Time_Keep | ||
| - | # Многострочные парсеры для GitLab | + | # PostgreSQL extended логи (с деталями запросов) |
| [PARSER] | [PARSER] | ||
| - | Name | + | Name |
| Format | Format | ||
| - | Regex | + | Regex ^(?< |
| + | Time_Key | ||
| + | Time_Format %Y-%m-%d %H:%M:%S.%L %Z | ||
| + | Time_Keep | ||
| - | [MULTILINE_PARSER] | + | # PHP-FPM логи |
| - | Name | + | [PARSER] |
| - | | + | Name |
| - | | + | |
| - | Rule " | + | |
| - | | + | Time_Key |
| + | Time_Format %d-%b-%Y %H:%M:%S | ||
| + | | ||
| + | |||
| + | # Стандартный syslog | ||
| + | [PARSER] | ||
| + | Name syslog_rfc3164 | ||
| + | Format | ||
| + | Regex ^\<(?< | ||
| + | Time_Key | ||
| + | Time_Format %b %d %H:%M:%S | ||
| + | Time_Keep | ||
| + | |||
| + | # Grafana лог формата key=value | ||
| + | [PARSER] | ||
| + | Name grafana_logfmt | ||
| + | Format | ||
| + | Time_Key | ||
| + | Time_Format %Y-%m-%dT%H:%M:%S.%LZ | ||
| + | Time_Keep | ||
| + | |||
| + | [PARSER] | ||
| + | Name grafana_regex | ||
| + | Format | ||
| + | Regex | ||
| + | Time_Key | ||
| + | Time_Format %Y-%m-%dT%H: | ||
| + | Time_Keep | ||
| </ | </ | ||
| Строка 306: | Строка 446: | ||
| <code yaml> | <code yaml> | ||
| + | auth_enabled: | ||
| + | server: | ||
| + | http_listen_port: | ||
| + | |||
| + | common: | ||
| + | instance_addr: | ||
| + | path_prefix: | ||
| + | storage: | ||
| + | filesystem: | ||
| + | chunks_directory: | ||
| + | rules_directory: | ||
| + | replication_factor: | ||
| + | ring: | ||
| + | kvstore: | ||
| + | store: inmemory | ||
| + | |||
| + | schema_config: | ||
| + | configs: | ||
| + | - from: 2020-10-24 | ||
| + | store: tsdb | ||
| + | object_store: | ||
| + | schema: v13 | ||
| + | index: | ||
| + | prefix: index_ | ||
| + | period: 24h | ||
| + | |||
| + | ruler: | ||
| + | alertmanager_url: | ||
| + | |||
| + | limits_config: | ||
| + | retention_period: | ||
| + | reject_old_samples: | ||
| + | reject_old_samples_max_age: | ||
| + | allow_structured_metadata: | ||
| + | max_query_length: | ||
| + | | ||
| + | ingester: | ||
| + | lifecycler: | ||
| + | ring: | ||
| + | kvstore: | ||
| + | store: inmemory | ||
| + | replication_factor: | ||
| + | final_sleep: | ||
| + | chunk_idle_period: | ||
| + | max_chunk_age: | ||
| + | chunk_target_size: | ||
| + | chunk_retain_period: | ||
| + | |||
| + | table_manager: | ||
| + | retention_deletes_enabled: | ||
| + | retention_period: | ||
| </ | </ | ||
| Строка 318: | Строка 509: | ||
| <code bash> | <code bash> | ||
| + | # Проверяем конфигурацию | ||
| + | $ docker exec -it < | ||
| + | |||
| + | # Смотрим логи | ||
| + | $ docker service logs logging_fluent-bit | ||
| + | |||
| + | # Проверяем метрики | ||
| + | $ curl http:// | ||
| + | # Тестируем парсеры | ||
| + | $ echo ' | ||
| + | $ docker exec -i < | ||
| </ | </ | ||
| ==== Запросы в Grafana ==== | ==== Запросы в Grafana ==== | ||
| - | < | + | < |
| {job=" | {job=" | ||
| - | </ | ||
| - | < | ||
| {container_name=" | {container_name=" | ||
| - | </ | ||
| - | < | ||
| {job=" | {job=" | ||
| - | </ | ||
| - | < | ||
| {node_name=" | {node_name=" | ||
| - | </ | ||
| - | < | ||
| # Все логи GitLab | # Все логи GitLab | ||
| {container_name=~" | {container_name=~" | ||
| - | </ | ||
| - | < | ||
| # Логи по компонентам | # Логи по компонентам | ||
| {container_name=~" | {container_name=~" | ||
| - | </ | ||
| - | < | ||
| # Ошибки | # Ошибки | ||
| {container_name=~" | {container_name=~" | ||
| - | </ | ||
| - | < | ||
| # Запросы с определенным correlation_id | # Запросы с определенным correlation_id | ||
| {container_name=~" | {container_name=~" | ||
| - | </ | ||
| - | < | ||
| # Логи Sidekiq | # Логи Sidekiq | ||
| {container_name=~" | {container_name=~" | ||
| + | |||
| + | # Все логи GitLab с parsed_data | ||
| + | {container_name=~" | ||
| + | |||
| + | # Логи с ошибками | ||
| + | {environment=" | ||
| + | |||
| + | # Медленные PostgreSQL запросы | ||
| + | {service_name=~" | ||
| + | |||
| + | # Nginx 5xx ошибки | ||
| + | {container_name=~" | ||
| + | |||
| + | # Sidekiq логи | ||
| + | {container_name=~" | ||
| </ | </ | ||