You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+47-4Lines changed: 47 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,19 +1,25 @@
1
1
# Преобразование логов http accesslog в метрики с vector.dev
2
2
3
-
В данном каталоге лежат файлы описывающий подход, позволяющий генерировать метрики из логов без переписывания кода трансформов под каждый сервис.
3
+
В данном каталоге лежат файлы описывающий подход, позволяющий генерировать [метрики из логов](https://vector.dev/docs/reference/configuration/transforms/log_to_metric/) без переписывания кода трансформов[vector.dev](https://vector.dev/) под каждый сервис.
4
4
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
+
**Описание:**
6
6
7
7
1. Полагаемся на то, что все сервисы пишут логи в фиксированном формате JSON и имеют одинаковый набор обязательных полей. См. [example_logs]
8
8
2. Для кодогенерации использован Ansible и jinja2 шаблоны. Генерируем toml файлы конфигурации vector.dev и тесты к ним, где нужно.
9
9
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/.
11
17
12
18
## Что нам дал рефакторинг
13
19
14
20
* Мы вместо 5 часов теперь тратим 10-30 минут на добавление/изменение метрик с учетом выкатки на прод
15
21
* Появилась автоматическая валидация по схеме, теперь ошибку при описании метрки допустить сложнее
16
-
* Теперь для добавления новой метрки не нужно знать как это закодировать на языку VRL - достаточно YAML девелопера )
22
+
* Теперь для добавления новой метрки не нужно знать как это закодировать на языке VRL - достаточно YAML девелопера )
17
23
18
24
19
25
## Ограничения
@@ -31,6 +37,43 @@
31
37
4. Выполните сборку и тесты `VECTOR_ENV=<env> make test-vector-transforms`, если не указать VECTOR_ENV, то используется `VECTOR_ENV=testing`
32
38
5. Созданные файлы смотрите в каталоге [.generated/vector_config]
33
39
40
+
## Граф компонентов vector.dev
41
+
42
+
В приведенной конфигурации создается следующий граф компонентов:
## Как писать фильтры в metric-catalog.yml правлиьно
48
+
49
+
* При описании указывайте фильтры по полям с наименьшим количеством значений и сравниваемых через простое сравнение без регулярных выражений - это улучшит производительнсоть обработки.
50
+
* В последнию очередь добавляйте условия с регулярными выржениями re/nre, т.к. чем позже они в выражении, тем больше шанс, что простые условия отсеят событие раньше.
51
+
* Старайтесь всегда сначала обходиться простыми условиями, и лишь при невозможности их применения переходить на условия с регулярными выржениями re/nre.
52
+
53
+
Пример более тяжелого для вычисления фильтра (плохой пример):
54
+
55
+
- selector: Исключаем из метрик логи канарееченого релиза, которые получен для запросов из внутренней сети. Чтобы это не попадало SLO
56
+
filter:
57
+
service_name:
58
+
re: "^.*-canary(-.*)?$"
59
+
namespace:
60
+
re: ".*-production"
61
+
is_internal_traffic:
62
+
eq: "1"
63
+
64
+
65
+
Тот же фильтр с измененным порядокм полей будет вычисляться быстрее (хороший пример):
66
+
67
+
- selector: Исключаем из метрик логи канарееченого релиза, которые получен для запросов из внутренней сети. Чтобы это не попадало SLO
68
+
filter:
69
+
is_internal_traffic: # << поставили на первое место простой фильтр
70
+
eq: "1"
71
+
namespace:
72
+
re: ".*-production"
73
+
service_name:
74
+
re: "^.*-canary(-.*)?$"
75
+
76
+
34
77
## Контакты
35
78
36
79
Если вам интересны подробности вы можете писать нам, см. сайт https://vitech.team/ ("По вопросам сотрудничества") или приходите работать к нам.
0 commit comments