События Graphite
Graphite известен хранением простых метрик «ключ/значение» с использованием формата базы данных временных рядов Whisper на диске. Не так хорошо известно, что Graphite также поставляется с функцией под названием События, которая поддерживает более богатый формат хранения метрик, подходящий для нерегулярных событий, часто связанных с метаданными.
Примеры данных, подходящих для этого формата хранения, включают релизы, коммиты, исключения приложений и изменения состояния, где вы можете отслеживать или сопоставлять событие с традиционной активностью временных рядов.
Хранение в базе данных
Поскольку Whisper был разработан для хранения простых данных временных рядов (ключ метрики, значение и отметка времени), он совершенно не подходит для хранения богатых данных метрик, таких как события. Многие пользователи по-прежнему хранят данные простого типа событий (например, релизы, изменения состояния и т. д.) в Whisper, кодируя их значение в пространстве имен метрики и отображая их как вертикальную линию с функцией Graphite drawAsInfinite.
Однако использование этой модели обычно требует использования подстановочных символов в большом количестве этих файлов и каталогов метрик-синглтонов, что может привести к значительному снижению производительности сервера и ухудшению пользовательского опыта. Для поддержки этого более сложного случая использования база данных веб-приложения Graphite была расширена, чтобы поддерживать этот новый тип метрики.
Примечание
Для событий требуется версия веб-приложения Graphite 0.9.9 или более поздняя.
Добавление событий
События можно отправлять через HTTP POST с помощью командной строки, таких как curl, или с помощью различных библиотек программирования HTTP. Формат JSON прост и предсказуем.
$ curl -X POST "http://graphite/events/"
-d '{ "what": "Event - deploy", "tags": ["deploy"], "when": 1467844481,
"data": "deploy of master branch happened at Wed Jul 6 22:34:41 UTC 2016" }' when — это необязательный ключ, который устанавливается в текущую метку времени Unix, если when не задан.
Примечание: до версии 0.10.0 значение tags — это строка, где несколько тегов разделяются пробелом.
Запрос событий
Graphite позволяет вам запросить теги, связанные с событиями. Вы можете искать одну строку тега, комбинацию тегов, разделенных пробелами, или простой * подстановочный символ с использованием функции events.
$ curl -s "http://graphite/render/?target=events('exception')&format=json" | json_pp
[
{
"target" : "events(exception)",
"datapoints" : [
[
1,
1388966651
],
[
3,
1388966652
]
]
}
] Также можно получить сырые события с помощью API.
$ curl -s "http://graphite/events/get_data?tags=deploy&from=-3hours&until=now" | json_pp
[
{
"when" : 1392046352,
"tags" : ["deploy"],
"data" : "deploy of master branch happened at Fri Jan 3 22:34:41 UTC 2014",
"id" : 2,
"what" : "Event - deploy"
},
{
"id" : 3,
"what" : "Event - deploy",
"when" : 1392046661,
"tags" : ["deploy"],
"data" : "deploy of master branch happened at Fri Jan 3 22:34:41 UTC 2014"
}
] Параметр set принимает необязательный параметр union или intersection, чтобы определить поведение при фильтрации наборов тегов (т. е. включение или исключение). По умолчанию Graphite использует «ленивое объединение», которое вернет любые соответствующие события для заданного тега в списке тегов. Это поведение не интуитивно и поэтому будет устаревать в будущих выпусках.
Управление событиями в административном интерфейсе
События можно управлять с помощью модуля администрирования Graphite admin-webapp. Это особенно удобно для удаления большого количества событий одновременно, хотя также поддерживается добавление и редактирование отдельных событий.
© 2008–2012 Chris Davis
© 2011–2016 The Graphite Project
Licensed under the Apache License, Version 2.0.
https://graphite.readthedocs.io/en/latest/events.html