{"id":40055069,"url":"https://github.com/vseinstrumentiru/vector.dev-metrics-to-logs-helper","last_synced_at":"2026-01-19T06:34:07.924Z","repository":{"id":278954643,"uuid":"770440893","full_name":"vseinstrumentiru/vector.dev-metrics-to-logs-helper","owner":"vseinstrumentiru","description":"Кодогенерация конфигурации vector.dev для подсчета метрик по логам http accesslog","archived":false,"fork":false,"pushed_at":"2025-04-29T14:50:09.000Z","size":62,"stargazers_count":3,"open_issues_count":3,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-29T15:58:45.326Z","etag":null,"topics":["code-generator","logging","logs-to-metrics","metrics","metrics-from-logs","vector","vector-dev"],"latest_commit_sha":null,"homepage":"http://vitech.team","language":"Jinja","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vseinstrumentiru.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-03-11T14:58:51.000Z","updated_at":"2025-04-17T16:03:44.000Z","dependencies_parsed_at":"2025-02-22T19:32:02.695Z","dependency_job_id":"93f9e1f8-748a-41ae-8c59-1d433f5f35c8","html_url":"https://github.com/vseinstrumentiru/vector.dev-metrics-to-logs-helper","commit_stats":null,"previous_names":["vseinstrumentiru/vector.dev-metrics-to-logs-helper"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/vseinstrumentiru/vector.dev-metrics-to-logs-helper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vseinstrumentiru%2Fvector.dev-metrics-to-logs-helper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vseinstrumentiru%2Fvector.dev-metrics-to-logs-helper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vseinstrumentiru%2Fvector.dev-metrics-to-logs-helper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vseinstrumentiru%2Fvector.dev-metrics-to-logs-helper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vseinstrumentiru","download_url":"https://codeload.github.com/vseinstrumentiru/vector.dev-metrics-to-logs-helper/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vseinstrumentiru%2Fvector.dev-metrics-to-logs-helper/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28562405,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-19T03:31:16.861Z","status":"ssl_error","status_checked_at":"2026-01-19T03:31:15.069Z","response_time":67,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["code-generator","logging","logs-to-metrics","metrics","metrics-from-logs","vector","vector-dev"],"created_at":"2026-01-19T06:34:07.211Z","updated_at":"2026-01-19T06:34:07.919Z","avatar_url":"https://github.com/vseinstrumentiru.png","language":"Jinja","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Преобразование логов http accesslog в метрики с vector.dev\n\nВ данном каталоге лежат файлы описывающий подход, позволяющий генерировать [метрики из логов](https://vector.dev/docs/reference/configuration/transforms/log_to_metric/) без переписывания кода трансформов [vector.dev](https://vector.dev/) под каждый сервис.\n\n**Описание:**\n\n1. Полагаемся на то, что все сервисы пишут логи в фиксированном формате JSON и имеют одинаковый набор обязательных полей. См. [example_logs]\n2. Для кодогенерации использован Ansible и jinja2 шаблоны. Генерируем toml файлы конфигурации vector.dev и тесты к ним, где нужно.\n3. Метрики определяются в файле [ansible-playbook/vars/metrics-catalog.\u003cenv\u003e.yml], после этого запускаем генерацию через ansible. См пример в Makefile. По умолчанию генерируется для `env=testing`, чтобы генерировать для production запускать `VECTOR_ENV=production make \u003cкоманда\u003e`\n4. Отдельной задачей конфигурации выгружаются на серверы с агрегаторами vector.dev, и для применения новой конфигурации выполняется перезапуск процесса vector (здесь не приведены).\n\n\n## Как было раньше\n\nКаждый раз под новый источник мы писали новый код VRL, часто делая copy/paste с незначительными правками. Это могло занимать с отладкой и тестами весь рабочий день.\nПотому в 2023 нас это перестало устраивать и мы придумали это подход. Подробно читайте https://habr.com/ru/articles/809801/ и https://habr.com/ru/articles/864614/.\n\n## Что нам дал рефакторинг\n\n* Мы вместо 5 часов теперь тратим 10-30 минут на добавление/изменение метрик с учетом выкатки на прод\n* Появилась автоматическая валидация по схеме, теперь ошибку при описании метрки допустить сложнее\n* Теперь для добавления новой метрки не нужно знать как это закодировать на языке VRL - достаточно YAML девелопера )\n\n\n## Ограничения\n\nДанный код является ознакомительным и не представляет собой готовое решение, вы можете придумать свое на основе данных идей.\nПотому мы не приводим полные конфигурации vector.dev, код развертывания и полный набор ansible файлов для playbook.\nОднако вы можете сгенерировать по файлу [ansible-playbook/vars/metrics-catalog.\u003cenv\u003e.yml] файлы конфигурации vector и посмотреть как они выглядят.\n\n## Генерирование файлов конфигурации\n\n1. Используйте Ubuntu Linux (или Debian)\n2. Запустите `make install-dependencies` и `make install-dev-dependencies`\n3. Запустите `make download-vector-bin` - установить файлы vector для валидации запуска тестов\n3. Метрики определяются в файле [ansible-playbook/vars/metrics-catalog.\u003cenv\u003e.yml], после этого запускаем генерацию через ansible. См пример в Makefile. По умолчанию генерируется для `env=testing`, чтобы генерировать для production запускать `VECTOR_ENV=production make \u003cкоманда\u003e`\n4. Выполните сборку и тесты `VECTOR_ENV=\u003cenv\u003e make test-vector-transforms`, если не указать VECTOR_ENV, то используется `VECTOR_ENV=testing`\n5. Созданные файлы смотрите в каталоге [.generated/vector_config]\n\n## Граф компонентов vector.dev\n\nВ приведенной конфигурации создается следующий граф компонентов:\n\n![Граф компонентов vector.dev](docs/vector_topology-v1.2.svg)\n\n\n## Как писать фильтры в metric-catalog.yml правлиьно\n\n* При описании указывайте фильтры по полям с наименьшим количеством значений и сравниваемых через простое сравнение без регулярных выражений - это улучшит производительнсоть обработки.\n* В последнию очередь добавляйте условия с регулярными выржениями re/nre, т.к. чем позже они в выражении, тем больше шанс, что простые условия отсеят событие раньше.\n* Старайтесь всегда сначала обходиться простыми условиями, и лишь при невозможности их применения переходить на условия с регулярными выржениями re/nre.\n\nПример более тяжелого для вычисления фильтра (плохой пример):\n\n        - selector: Исключаем из метрик логи канарееченого релиза, которые получен для запросов из внутренней сети. Чтобы это не попадало SLO\n          filter:\n            service_name:\n                re: \"^.*-canary(-.*)?$\"\n            namespace:\n                re: \".*-production\"\n            is_internal_traffic:\n                eq: \"1\"\n\n\nТот же фильтр с измененным порядокм полей будет вычисляться быстрее (хороший пример):\n\n        - selector: Исключаем из метрик логи канарееченого релиза, которые получен для запросов из внутренней сети. Чтобы это не попадало SLO\n          filter:\n            is_internal_traffic:  # \u003c\u003c поставили на первое место простой фильтр\n                eq: \"1\"\n            namespace:\n                re: \".*-production\"\n            service_name:\n                re: \"^.*-canary(-.*)?$\"\n\n\n## Контакты\n\nЕсли вам интересны подробности вы можете писать нам, см. сайт https://vitech.team/ (\"По вопросам сотрудничества\") или приходите работать к нам.\n\nИли https://github.com/r3code\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvseinstrumentiru%2Fvector.dev-metrics-to-logs-helper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvseinstrumentiru%2Fvector.dev-metrics-to-logs-helper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvseinstrumentiru%2Fvector.dev-metrics-to-logs-helper/lists"}