Skip to content

Commit ca7c9ac

Browse files
committed
Переделка подсчета метрик по логам
Closes #6
1 parent c287a89 commit ca7c9ac

File tree

8 files changed

+396
-399
lines changed

8 files changed

+396
-399
lines changed

README.md

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,25 @@
11
# Преобразование логов http accesslog в метрики с vector.dev
22

3-
В данном каталоге лежат файлы описывающий подход, позволяющий генерировать метрики из логов без переписывания кода трансформов под каждый сервис.
3+
В данном каталоге лежат файлы описывающий подход, позволяющий генерировать [метрики из логов](https://vector.dev/docs/reference/configuration/transforms/log_to_metric/) без переписывания кода трансформов [vector.dev](https://vector.dev/) под каждый сервис.
44

5-
**Внимание!** [Версия v1](https://github.com/vseinstrumentiru/vector.dev-metrics-to-logs-helper/tree/1.0.0) содержала [баг #1](/../../issues/1) который проявлялся, только если вы добавляли разные определения метрик (разные лейблы, разные фильтры). В текущей версии это исправлено (см. [новый граф обработки](docs/vector_topology-separate-metric-fileters.svg)).
5+
**Описание:**
66

77
1. Полагаемся на то, что все сервисы пишут логи в фиксированном формате JSON и имеют одинаковый набор обязательных полей. См. [example_logs]
88
2. Для кодогенерации использован Ansible и jinja2 шаблоны. Генерируем toml файлы конфигурации vector.dev и тесты к ним, где нужно.
99
3. Метрики определяются в файле [ansible-playbook/vars/metrics-catalog.<env>.yml], после этого запускаем генерацию через ansible. См пример в Makefile. По умолчанию генерируется для `env=testing`, чтобы генерировать для production запускать `VECTOR_ENV=production make <команда>`
10-
4. Отдельной задачей конфигурации выгружаются на серверы с агрегаторами vector.dev, и для применения новой конфигурации выполняется перезапуск процесса vector
10+
4. Отдельной задачей конфигурации выгружаются на серверы с агрегаторами vector.dev, и для применения новой конфигурации выполняется перезапуск процесса vector (здесь не приведены).
11+
12+
13+
## Как было раньше
14+
15+
Каждый раз под новый источник мы писали новый код VRL, часто делая copy/paste с незначительными правками. Это могло занимать с отладкой и тестами весь рабочий день.
16+
Потому в 2023 нас это перестало устраивать и мы придумали это подход. Подробно читайте https://habr.com/ru/articles/809801/ и https://habr.com/ru/articles/864614/.
1117

1218
## Что нам дал рефакторинг
1319

1420
* Мы вместо 5 часов теперь тратим 10-30 минут на добавление/изменение метрик с учетом выкатки на прод
1521
* Появилась автоматическая валидация по схеме, теперь ошибку при описании метрки допустить сложнее
16-
* Теперь для добавления новой метрки не нужно знать как это закодировать на языку VRL - достаточно YAML девелопера )
22+
* Теперь для добавления новой метрки не нужно знать как это закодировать на языке VRL - достаточно YAML девелопера )
1723

1824

1925
## Ограничения
@@ -31,6 +37,13 @@
3137
4. Выполните сборку и тесты `VECTOR_ENV=<env> make test-vector-transforms`, если не указать VECTOR_ENV, то используется `VECTOR_ENV=testing`
3238
5. Созданные файлы смотрите в каталоге [.generated/vector_config]
3339

40+
## Граф компонентов vector.dev
41+
42+
В приведенной конфигурации создается следующий граф компонентов:
43+
44+
![Граф компонентов vector.dev](docs/vector_topology-v1.2.svg)
45+
46+
3447
## Контакты
3548

3649
Если вам интересны подробности вы можете писать нам, см. сайт https://vitech.team/ ("По вопросам сотрудничества") или приходите работать к нам.

ansible-playbook/vars/metrics-catalog.testing.yml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,32 @@ metrics_catalog:
9999
cluster_name: "test::dc2-old"
100100
container_name: "frontend"
101101
service_name: "webshop-canary"
102+
- selector: "Все запросы на Webshop Circuit Breaker"
103+
filter:
104+
http_path:
105+
re: ".*"
106+
label_override: ":url_path"
107+
service_name:
108+
eq: "webshop-cb"
109+
testdata: # указывать в ключах имена полей на выходе из transforms.http_accesslog-k8s
110+
- test:
111+
input_values:
112+
http_path: "/brand/abc-123/sub-1234/"
113+
http_method: "GET"
114+
http_status_code: "200"
115+
duration_sec: "2.1"
116+
cluster_name: "any_dc"
117+
container_name: "any_cn"
118+
kubernetes.pod_node_name: "ox2-kub-prod18"
119+
service_name: "webshop-cb"
120+
expect:
121+
label_values:
122+
path: ":url_path"
123+
method: "GET"
124+
status: "200"
125+
cluster_name: "any_dc"
126+
container_name: "any_cn"
127+
service_name: "webshop-cb"
102128
# Метрика vi_http_request_duration_seconds
103129
request_duration_seconds: # требуется для transforms.metrics-http-accesslog-k8s - бакеты определены там
104130
metric_type: histogram

0 commit comments

Comments
 (0)