Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Ведение журнала жизненно необходимо для любого программного проекта. В этом посте мы рассмотрим три разных решения для запросов к журналам и покажем, как они работают.
Ведение журнала жизненно важно для любого программного проекта, от разработки до текущего администрирования. Журналы сопровождения имеют решающее значение для определения состояния приложения, а также для мониторинга и устранения неполадок. В наши дни ведение журнала обычно встроено во все приложения, от простых журналов доступа пользователей до активности базы данных, журналов ошибок и журналов сетевого трафика.
В этом посте мы рассмотрим следующие решения для запросов к журналам.
Решение для запросов к журналам | Пользовательский язык запросов | Активатор SQL | Хостинг | Запрос в Arctype |
LogTail | н/д | ClickHouse | Better Stack | Скоро |
Promscale | PromQL | встроенный | Timescale | Да |
Logflare | LQL | BigQuery | Supabase | Скоро |
Основы запросов журналов
Доступные решения для запросов к журналам будут различаться в зависимости от платформы. В то время как некоторые платформы предлагают языки запросов для предметной области, основанные на других языках и шаблонах (например, NoSQL, SQL, JSON и Regex) или производные от них, другие могут предлагать возможность использования общеизвестных языков, таких как SQL. Таблица выше резюмирует эти варианты.
Зачем запрашивать ваши журналы с помощью SQL?
SQL является наиболее часто используемым языком в отрасли для взаимодействия с базами данных. Использование его для поиска в журналах означает, что вам не нужно изучать новый синтаксис. Встроены такие функции, как триггеры SQL для обновления объектов базы данных. Например, обновление в таблице журнала может инициировать событие для очистки данных и их копирования в новую отформатированную таблицу.
Преимущества SQL перед другими подходами к лог-запросам
SQL относительно прост по сравнению с предметно-ориентированными языками и другими вариантами, такими как Regex.
SQL обеспечивает расширенные функции, такие как триггеры SQL и хранимые процедуры при запросе журналов.
SQL — эффективный выбор для транзакционных данных, таких как журналы со статической структурой.
SQL работает быстрее при выполнении аналитических запросов по сравнению с другими вариантами.
Давайте рассмотрим 3 альтернативных решения для запросов, имеющихся на рынке. Для всех следующих примеров мы будем запрашивать системные журналы из Nginx, установленного на сервере Ubuntu.
LogTail
LogTail от Better Stack предлагает SQL-совместимую систему для управления журналами, основанную на системе управления базами данных ClickHouse с открытым исходным кодом. Он позволяет пользователям собирать журналы по всему стеку программного обеспечения, от системных журналов до баз данных, Docker и многого другого.
LogTail имеет встроенные функции для создания информационных панелей с помощью Grafana, интегрированного как часть платформы и поддерживающего совместную работу между членами команды. LogTail также интегрируется с внешними хранилищами данных, такими как AWS S3 Glacier, для долговременного и экономичного архивирования. Эта платформа разработана с учетом требований безопасности и использует сертифицированные по стандарту DIN ISO/IEC 27001 центры обработки данных, отвечающие требованиям GDPR, для хранения и управления данными клиентов.
Как использовать LogTail
LogTail — это управляемая сервис, который требует от пользователей создания учетной записи на платформе. Затем им необходимо получить токен API, чтобы авторизовать запросы от агентов на передачу данных на платформу. Это делается путем создания подключения источника в LogTail. Пользователи могут получать журналы с помощью предпочтительного агента только после выполнения этого шага.
Хотя рекомендуемым сервером пересылки является Vector от Datadog, LogTail также поддерживает другие параметры, такие как Fluent Bit, Logstash, Fluentd и Syslog. Пользователям нужно только создать учетную запись LogTail и получить токен API, чтобы авторизовать запросы от агентов на передачу данных на платформу.
Получение и запрос журналов с помощью LogTail
Получение данных
Перейдите к источникам и нажмите «Подключить источник», чтобы указать имя и платформу для сбора журналов. LogTail создаст источник данных с токеном источника, который может подключаться к источнику.
Затем установите предпочтительный агент. Инструкции по установке рекомендуемого клиента приведены в источнике данных в разделе инструкций по установке. Однако пользователи могут свободно использовать любой поддерживаемый вариант.
После настройки конфигурации агента и перезапуска службы вы сможете увидеть собранные логи в разделе Live Tail.
Запрос журналов
Перейдите в Explore раздела SQL. Здесь пользователи могут запрашивать любые собранные журналы, используя синтаксис SQL. В следующем примере мы запрашиваем успешные ответы ( nginx.status_integer = 200
) с сервера Nginx.
Promscale
Promscale — это коннектор для Prometheus, одного из ведущих решений для мониторинга с открытым исходным кодом. Promscale создан разработчиками Timescale, базы данных временных рядов, полностью совместимой с Postgres. Поскольку журналы представляют собой события временных рядов, Timescale разработала Promscale для получения событий из Prometheus и предоставления их в SQL. Вы можете установить Promscale разными способами.
Как настроить Promscale
Прежде чем мы перейдем к настройке Prometheus для сбора журналов, вот как можно запустить Promscale с помощью Docker. В этом примере мы используем экземпляр Timescale на localhost, но мы также можем подключить Promscale к облаку Timescale. Это обычное дело, если, например, вы используете кластер Kubernetes с установленным внутри него Prometheus.
Запустите эти команды, если вы уже настроили сеть Docker. Сначала запустите локальный экземпляр Timescale.
docker run --name timescaledb -e POSTGRES_PASSWORD=getarctype -it \
-p 5432:5432 --network promscale-timescaledb \
timescaledev/promscale-extension:latest-ts2-pg13 \
postgres -csynchronous_commit=off
Затем запустите коннектор Promscale.
docker run --name promscale -it -p 9201:9201 \
--network promscale-timescaledb timescale/promscale:latest \
-db-password=getarctype -db-port=5432 -db-name=postgres \
-db-host=timescaledb -db-ssl-mode=allow
Чтобы подключить этот экземпляр Promscale к облаку Timescale, вы можете сделать следующее.
docker run --rm --name promscale -it -p 9201:9201 \
--network promscale-timescaledb timescale/promscale:latest \
-db-user=tsdbadmin -db-password=<PASSWORD> \
-db-port=31035 -db-name=tsdb \
-db-host=<HOST>.tsdb.cloud.timescale.com \
-db-ssl-mode=allow
Как подключится к Prometheus
Prometheus управляется Cloud Native Computing Foundation и получил признание во всей отрасли для сбора и агрегирования метрик. Он имеет множество клиентских библиотек для оркестрации кода приложения, для специальных экспортеров и для таких сервисов, как HAProxy, Graphite и других. Prometheus имеет собственный развитый ый язык запросов под названием PromQL, который можно использовать для запросов к журналам и функциям, таким как push-шлюз для краткосрочных заданий. Кроме того, он предоставляет менеджер предупреждений на основе изменений собранных показателей.
Хотя у Prometheus может быть более длинная кривая обучения по сравнению с другими решениями, он предлагает лучшие возможности настройки и интеграции для сбора любых типов метрик или журналов. В отличие от двух других решений, Prometheus можно установить на своей инфраструктуре, при этом предлагаются варианты управляемых сервисов, таких как Amazon Managed Service для Prometheus.
Prometheus в основном использует экспортеры и клиентские библиотеки для сбора данных. Некоторые программные инструменты, такие как Kubernetes и Traefik, напрямую предоставляют метрики Prometheus, что устраняет необходимость в экспортере.
Запрашивать журналы можно с помощью PromQL через веб-интерфейс Prometheus, клиенты API или внешние инструменты визуализации, такие как Grafana.
Получение и запрос журналов с помощью Prometheus
Получение данных
Предположим, вы хотите получать журналы из установки Nginx. Этого можно добиться с помощью экспортера, такого как prometheus-nginxlog-exporter
, который позволяет пользователям загружать журналы Nginx в Prometheus. Существует несколько способов настроить этот экспортер : от прямой установки Docker через пакеты DEB или RMP до запуска в качестве контейнера sidecar в среде Kubernetes и т. д. В следующем примере мы установили prometheus-nginxlog-exporter
пакет DEB и запустили экспортер с пользовательский файл конфигурации.
listen:
port: 4040
address: "0.0.0.0"
consul:
enable: false
namespaces:
- name: nginxlogs
format: "$remote_addr - $remote_user [$time_local] \"$request\" $status $body_bytes_sent \"$http_referer\" \"$http_> source:
files:
- /var/log/nginx/access.log
labels:
service: "nginx"
environment: "production"
hostname: "nginx.example.com"
histogram_buckets: [.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10]
Примечание. Возможно, вам потребуется изменить формат журнала сервера Nginx, чтобы он соответствовал ожидаемому формату экспортера.
og_format custom '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$http_x_forwarded_for"';
Затем на стороне Prometheus мы можем изменить prometheus.yml, чтобы включить новую конфигурацию задания, указывающую на файл prometheus-nginxlog-exporter
.
- job_name: 'nginx'
scrape_interval: 15s
static_configs:
- targets: ['18.184.64.170:4040']
После перезапуска Prometheus вы сможете увидеть новый экземпляр при запросе с помощью команды up{}, указывающей на созданный сервис.
Запрос журналов
При запросе журналов вы можете использовать приведенную выше конфигурацию Promscale с Timescale. Вы также можете использовать веб-интерфейс Prometheus с командами PomQL для запроса собранных метрик. Предположим, нам нужно увидеть успешные запросы (HTTP 200), выполненные на сервере. Это можно сделать с помощью следующей команды.
Язык запросов Prometheus позволяет пользователям выбирать и агрегировать данные временных рядов в режиме реального времени. Эти данные могут отображаться в виде графика, в табличном формате или предоставляться внешним системам через HTTP API. В приведенном выше примере мы указали метрику с помощью команды nginxlogs_http_response_count_total
, ограничив область запроса метриками, поступающими из пространства имен nginxlogs
. Несмотря на то, что PromQL — мощный язык, пользователям необходимо изучить его, прежде чем эффективно использовать для запроса данных из Prometheus. Это делает SQL лучшим решением, особенно если вы уже используете Postgres и можете использовать шкалу времени.
Logflare
Logflare, в настоящее время являющаяся частью Supabase, направлена на оптимизацию ведения журналов для приложений на основе Cloudflare, Elixir и Vercel. Однако его можно адаптировать для поддержки любого типа журналов. Logflare предоставляет возможности структурированного ведения журнала без ограничений и дополнительных задержек. Он ориентирован на обеспечение наилучшей производительности с минимальными накладными расходами при обработке журналов для поддерживаемых платформ приложений.
Logflare поддерживает почти неограниченную историю событий и поддерживается Google BigQuery. Более того, Logflare позволяет пользователям напрямую интегрироваться с BigQuery и DataStudio для дополнительной аналитики с использованием SQL и инструментов визуализации. Кроме того, LogFlare поддерживает функции оповещения по электронной почте и SMS, маршрутизацию журналов к различным источникам с использованием Regex и даже предоставляет возможность добавлять метаданные в журналы.
Как использовать Logflare
Как поставщик управляемых услуг, Logflare требует от пользователей создания учетной записи на своей платформе. Или, если у вас есть учетная запись Supabase, вы можете получить доступ к журналам своего проекта /settings/logs/database
, как показано в этом видео Supabase на YouTube. Он также предоставляет прогрессивное веб-приложение, которое позволяет клиентам Android и iOS напрямую обращаться к платформе Logflare.
Cloudflare и Vercel Logflare предлагают возможность установки одним щелчком мыши для настройки агентов ведения журнала для изначально поддерживаемых платформ. Они также предоставляют руководства по интеграции других поддерживаемых платформ, таких как Gigalixir, Heroku, Elixir, JavaScript (Pinto Transport), Github Actions/Webhooks, FluentBit и General Webhooks.
Журналы можно запрашивать напрямую через платформу Logflare или через Google BigQuery. Logflare даже позволяет пользователям настраивать серверную часть BigQuery для непосредственного управления своим хранилищем и затратами, платя LogFlare только за управление конвейерами журналов.
Получение и запрос журналов с помощью Logflare
Получение данных
Во-первых, пользователь должен создать учетную запись Logflare. Затем они должны создать новый источник данных, который позволит им принимать данные с исходным ключом для конвейера и предоставить необходимый ключ API для аутентификации.
Далее мы будем использовать Fluent Bit для приема данных Nginx. Мы будем использовать пакет Fluent Bit td-agent-bit для Ubuntu, чтобы обеспечить это, и изменим конфигурацию, чтобы отразить входные данные в виде журналов Nginx, а выходные данные указать на Logflare.
[INPUT]
Name tail
Path /var/log/syslog
[OUTPUT]
Name http
Match *
tls On
Host api.logflare.app
Port 443
URI /logs/json?api_key=IVJaC85Mk79K&source=ffbda396-e1f2-4c0e-851a-4b99de24b398
Format json
Retry_Limit 5
json_date_format iso8601
json_date_key timestamp
Перезапустите td-agent-bit
, и вы сможете видеть журнал доступа Nginx каждый раз, когда делается запрос к серверу.
Запрос данных
Logflare имеет собственный язык запросов под названием LQL. Давайте посмотрим, как запросить успешные ответы HTTP 200 с помощью следующей команды.
200 c:count(*) c:group_by(t::minute)
Еще одна замечательная особенность Logflare заключается в возможности предоставления бэкенда BigQuery. Для платных подписчиков он может либо исследовать данные через Google Data Studio, либо использовать BigQuery для запросов к бэкэнду напрямую с помощью SQL. Теперь вы также можете искать журналы, используя SQL внутри Supabase.
Заключение
Все рассмотренные выше решения для запросов к журналам поддерживают управление журналами.
LogTail можно считать самым простым вариантом с его встроенными функциями SQL-запросов и визуализации, за которым следует Logflare с его вариантами установки одним щелчком мыши для поддерживаемых платформ и поддержкой мобильных устройств.
Наконец приходит Prometheus, самое сложное решение из трех. Несмотря на сложность, Prometheus предлагает комплексное решение для всех ваших потребностей в мониторинге, помимо управления журналами.
Использование Prometheus стало намного проще благодаря добавлению Promscale. Выберите лучший инструмент из этих трех для ваших потребностей управления журналами в зависимости от ваших требований.