SlideShare a Scribd company logo
1 of 35
Использование Graphite и Grafana
Левон Авакян / WoT Server
Reliability /
l_avakyan@wargaming.net
Собираем метрики
1
Devops.Events
Содержание 2
• Зачем нужно собирать метрики?
• Как можно собирать метрики?
• Разбираем Graphite по частям
• Вопросы производительности. Go-carbon
• Graphana. Основные фичи
О чем мы будем говорить
Devops.Events
Зачем нужно собирать метрики?
Немного о бизнесе и архитектуре
3
Devops.Events
Бизнес 4
Функциональные требования
Как мы поймем что делаем
правильно?
Devops.Events
Архитектура 5
Нефункциональные требования
Как мы поймем что мы делаем
хорошо?
Devops.Events
Нефункциональные требования 6
То что можем померять runtime
• Доступность
• Надежность
• Расширяемость
• Производительность
Devops.Events
Надежность 7
Мониторинг и все такое
Как мы поймем что все
технически хорошо?
Devops.Events
Как можно собирать метрики?
Pull&Push стратегии
8
Devops.Events
Источники метрик 9
Где брать данные
• Логи
• БД
• Приложение
• ОС
• Сторонние приложения
Devops.Events
Pull 10
• Система мониторинга забирает данные у
приложения сама
Примеры:
• Zabbix
• Nagios
Devops.Events
Push 11
• Приложение отправляет данные о себе
Примеры:
• Prometey
• Graphite
Devops.Events
Graphite
Разбираем Graphite по частям
12
Devops.Events
Graphite 13
• carbon - Twisted демон, слушающий данные
• whisper - Хранилище для временных рядов ( time-
series data). Концепция циклический БД
• graphite webapp - Веб приложение на основе Django
для построения дашбородов
Вид изнутри
http://graphite.readthedocs.io/en/latest/index.html
Devops.Events
Graphite 14
Devops.Events
Graphite 15
• carbon-cache.py - принимает метрики по многим протоколам и
как можно быстрее записывает их
• carbon-relay.py – репликация и шардинг
• carbon-aggregator.py – работает перед carbon-cache, собирая
метрики до того как отправить их в хранилище
• carbon-aggregator-cache.py – два предыдущих демона в одном
Вид изнутри
http://graphite.readthedocs.io/en/latest/index.html
Devops.Events
Переходим к практике
А как это работает?
16
Devops.Events
Диаграмма последовательности работы с Grpahite 17
Devops.Events
Statsd 18
• statsd – простой демон, созданный для того чтобы
собирать и агрегировать метрики.
• Должна существовать клиентская реализация для
работы statsd в приложении. В связи с огромной
популярностью формат statsd стал де-факто
протоколом для сбора и агрегации метрик.
• Приложение по UDP шлет метрики в statsd, сам же
statsd собирает их и отправляет на бэкенд.
Вид изнутри
Statsite 19
Сервер метрик. Реализация statsd на С.
(https://github.com/statsite/statsite)
• Быстрый и надежный
• Минимизирует потребление памяти
• Поддерживает большое количество бэкендов
Вид изнутри
Devops.Events
Statsite 20
Пример использования
>>> import statsd
>>> c = statsd.StatsClient('localhost', 8125) # statsite host and port (udp)
>>> c.incr('foo') # Increment the 'foo' counter.
>>> c.timing('stats.timed', 320) # Record a 320ms 'stats.timed'.
>>> import statsd
>>> c = statsd.StatsClient('localhost', 8125, prefix='foo') # statsite host and
port (udp)
>>> c.incr('bar') # Will be 'foo.bar' in statsite/graphite.
Devops.Events
Пример реализации для falcon 21
def wrapper(func, timer_name):
@wraps(func)
def wrapped(*args, **kwargs):
with statsd.timer(timer_name):
res = func(*args, **kwargs)
return res
return wrapped
class StatsReportingAPI(type): # Use this a a __metaclass__ for any resource you want to automatically
report request timings
def __new__(meta, classname, bases, classDict):
newClassDict = {}
for attributeName, attribute in classDict.items():
if attributeName.startswith('on_') and type(attribute) == FunctionType:
key = '%s.%s.%s' % (
classDict['__module__'],
classname,
attributeName
)
attribute = wrapper(attribute, key)
newClassDict[attributeName] = attribute
return type.__new__(meta, classname, bases, newClassDict)
Statsite configuration 22
[statsite]
port = 8125
udp_port = 8125
log_level = INFO
log_facility = local0
flush_interval = 10
timer_eps = 0.01
set_eps = 0.02
stream_cmd = python sinks/statsite_graphite_sink.py graphite_host 2004 your.app.prefix
[histogram_api]
prefix=api
min=0
max=100
width=5
[histogram_default]
prefix=
min=0
max=200
width=20 Devops.Events
Сбрасываем метрики в графит 23
• Читаем stdin. На вход plain text вида
key|val|timestampn
• Собираем данные, пакуем с помощью pickle
• Раз в N секунд отправляем собранные метрики
sinks/statsite_graphite_sink.py graphite
Devops.Events
Вопросы производительности
go-carbon
24
Devops.Events
Работаем в продакшене 25
• Метрик становится больше
• Хотим хранить более точные данные
• Метрики собираем, посмотреть становится
проблематично
• Основная проблема I/O
Devops.Events
Ищем альтернативы 26
carbon-cache go-carbon
Использует одно ядро Один демон использует множество
ядер
Много опций для конфигурации Написан на Go
Поставляет в коробке Мало опций для конфигурации
Работает примерно в 4 раза
быстрее*
Devops.Events
Ищем альтернативы 27
carbon-relay carbon-ng-relay carbon-c-relay
Написан на twisted Написан на Go Написан на С
Нативный Web-panel Расширенное
управление кластером
Лайф апдейты
Агригаторы
В 2-3 раза быстрее
carbon relay*
На порядок быстрее
carbon-ng-relay*
Devops.Events
Итоговая конфигурация 28
2M метрик
Host HW: 14Tb ssd, Xeon(R)
CPU E5-2695 v4
Devops.Events
Graphana
Основные фичи
29
Devops.Events
Grafana 30
Open-source решение для построение дашбордов и
различных графиков для Graphite, Elastic Search,
OpenTSDB, Prometheus and InfluxDB.
https://grafana.com/
Devops.Events
Grafana 31
• Панели
• Графики/Гистограммы
• Одиночные метрики
• Таблицы
• Хитмапы
• Списки дашбордов
• Дашборды
• Шаблонизация дашбордов
• Аннотации
• Плейлисты
• Поиск/шаринг дашбордов
• Автоматизированные дашборды
• Экспорт/Импорт
• JSON модель
Основные фичи
Devops.Events
Grafana 32
• Источники данных
• Graphite
• Prometheus
• Elasticsearch
• InfluxDB
• OpenTSDB
• MySQL
• AWS Cloudwatch
• TestData
• Алертинг ( version > 4.0)
• Поддержка правил
• Внутрение метрики
• Нотификации
• Поддержка плагинов
Основные фичи
Devops.Events
Grafana 33
Основные фичи
Devops.Events
Grafana 34
Основные фичи
Devops.Events
Спасибо
Левон Авакян (l_avakyan@wargaming.net)
35
Devops.Events

More Related Content

Similar to Grpahite&grafana

Программируемость и автоматизация решений Ciscо - практическое применение
Программируемость и автоматизация решений Ciscо - практическое применениеПрограммируемость и автоматизация решений Ciscо - практическое применение
Программируемость и автоматизация решений Ciscо - практическое применениеCisco Russia
 
Облачные приложения и построение платформ для них на базе Openstack Дмитрий Х...
Облачные приложения и построение платформ для них на базе Openstack Дмитрий Х...Облачные приложения и построение платформ для них на базе Openstack Дмитрий Х...
Облачные приложения и построение платформ для них на базе Openstack Дмитрий Х...Cisco Russia
 
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...Ontico
 
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Positive Hack Days
 
Pavel Dovbush Toster
Pavel Dovbush Toster Pavel Dovbush Toster
Pavel Dovbush Toster Pavel Dovbush
 
обзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторингаобзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторингаКонстантин Никифоров
 
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...Ontico
 
Марина Степанова "Как мы заставили API Яндекс.Карт работать быстрее"
Марина Степанова "Как мы заставили API Яндекс.Карт работать быстрее"Марина Степанова "Как мы заставили API Яндекс.Карт работать быстрее"
Марина Степанова "Как мы заставили API Яндекс.Карт работать быстрее"Yandex
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Anton Baranov
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Ontico
 
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...Igor Miniailo
 
Работа с платами ИНСИС из MATLAB
Работа с платами ИНСИС из MATLABРабота с платами ИНСИС из MATLAB
Работа с платами ИНСИС из MATLABMATLAB
 
Selenium нетрадиционной ориентации или Тестирование производительности Javasc...
Selenium нетрадиционной ориентации или Тестирование производительности Javasc...Selenium нетрадиционной ориентации или Тестирование производительности Javasc...
Selenium нетрадиционной ориентации или Тестирование производительности Javasc...Nikita Makarov
 
Микросервисный фронтенд
Микросервисный фронтендМикросервисный фронтенд
Микросервисный фронтендViacheslav Slinko
 
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)Ontico
 
Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Fwdays
 
ФРИИ интернет предпринимательство - Приложения и сервисы для бизнеса
ФРИИ интернет предпринимательство - Приложения и сервисы для бизнесаФРИИ интернет предпринимательство - Приложения и сервисы для бизнеса
ФРИИ интернет предпринимательство - Приложения и сервисы для бизнесаЭкосистемные Проекты Фрии
 
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Ontico
 
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupДоклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupBadoo Development
 
Сенцов Сергей "Приемы оптимизаций Desktop приложений"
Сенцов Сергей "Приемы оптимизаций Desktop приложений"Сенцов Сергей "Приемы оптимизаций Desktop приложений"
Сенцов Сергей "Приемы оптимизаций Desktop приложений"Yulia Tsisyk
 

Similar to Grpahite&grafana (20)

Программируемость и автоматизация решений Ciscо - практическое применение
Программируемость и автоматизация решений Ciscо - практическое применениеПрограммируемость и автоматизация решений Ciscо - практическое применение
Программируемость и автоматизация решений Ciscо - практическое применение
 
Облачные приложения и построение платформ для них на базе Openstack Дмитрий Х...
Облачные приложения и построение платформ для них на базе Openstack Дмитрий Х...Облачные приложения и построение платформ для них на базе Openstack Дмитрий Х...
Облачные приложения и построение платформ для них на базе Openstack Дмитрий Х...
 
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
 
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
 
Pavel Dovbush Toster
Pavel Dovbush Toster Pavel Dovbush Toster
Pavel Dovbush Toster
 
обзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторингаобзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторинга
 
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
 
Марина Степанова "Как мы заставили API Яндекс.Карт работать быстрее"
Марина Степанова "Как мы заставили API Яндекс.Карт работать быстрее"Марина Степанова "Как мы заставили API Яндекс.Карт работать быстрее"
Марина Степанова "Как мы заставили API Яндекс.Карт работать быстрее"
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
 
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
 
Работа с платами ИНСИС из MATLAB
Работа с платами ИНСИС из MATLABРабота с платами ИНСИС из MATLAB
Работа с платами ИНСИС из MATLAB
 
Selenium нетрадиционной ориентации или Тестирование производительности Javasc...
Selenium нетрадиционной ориентации или Тестирование производительности Javasc...Selenium нетрадиционной ориентации или Тестирование производительности Javasc...
Selenium нетрадиционной ориентации или Тестирование производительности Javasc...
 
Микросервисный фронтенд
Микросервисный фронтендМикросервисный фронтенд
Микросервисный фронтенд
 
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
 
Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"
 
ФРИИ интернет предпринимательство - Приложения и сервисы для бизнеса
ФРИИ интернет предпринимательство - Приложения и сервисы для бизнесаФРИИ интернет предпринимательство - Приложения и сервисы для бизнеса
ФРИИ интернет предпринимательство - Приложения и сервисы для бизнеса
 
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
 
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupДоклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
 
Сенцов Сергей "Приемы оптимизаций Desktop приложений"
Сенцов Сергей "Приемы оптимизаций Desktop приложений"Сенцов Сергей "Приемы оптимизаций Desktop приложений"
Сенцов Сергей "Приемы оптимизаций Desktop приложений"
 

More from Levon Avakyan

Надежность World of Tanks Server
Надежность World of Tanks ServerНадежность World of Tanks Server
Надежность World of Tanks ServerLevon Avakyan
 
Реляционные базы данных
Реляционные базы данныхРеляционные базы данных
Реляционные базы данныхLevon Avakyan
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Levon Avakyan
 
World of Tanks Experience of Using Kafka
World of Tanks Experience of Using KafkaWorld of Tanks Experience of Using Kafka
World of Tanks Experience of Using KafkaLevon Avakyan
 
Wargaming Clan Platform
Wargaming Clan PlatformWargaming Clan Platform
Wargaming Clan PlatformLevon Avakyan
 
Архитектура мета игры Wargaming. Глобальная карта 2.0.
Архитектура мета игры Wargaming. Глобальная карта 2.0.Архитектура мета игры Wargaming. Глобальная карта 2.0.
Архитектура мета игры Wargaming. Глобальная карта 2.0.Levon Avakyan
 
Осознанный выбор. Python 3 для реализации сервисного шлюза клиента World of T...
Осознанный выбор. Python 3 для реализации сервисного шлюза клиента World of T...Осознанный выбор. Python 3 для реализации сервисного шлюза клиента World of T...
Осознанный выбор. Python 3 для реализации сервисного шлюза клиента World of T...Levon Avakyan
 
Кланы в Wargaming. От странички на танковом портале до мультиплатфермнного с...
Кланы в Wargaming. От странички на танковом портале до  мультиплатфермнного с...Кланы в Wargaming. От странички на танковом портале до  мультиплатфермнного с...
Кланы в Wargaming. От странички на танковом портале до мультиплатфермнного с...Levon Avakyan
 
Оперирование высоко нагруженными проектами. Или "Клановые войны" каждый день
Оперирование высоко нагруженными проектами. Или "Клановые войны" каждый деньОперирование высоко нагруженными проектами. Или "Клановые войны" каждый день
Оперирование высоко нагруженными проектами. Или "Клановые войны" каждый деньLevon Avakyan
 

More from Levon Avakyan (10)

Надежность World of Tanks Server
Надежность World of Tanks ServerНадежность World of Tanks Server
Надежность World of Tanks Server
 
Реляционные базы данных
Реляционные базы данныхРеляционные базы данных
Реляционные базы данных
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей.
 
World of Tanks Experience of Using Kafka
World of Tanks Experience of Using KafkaWorld of Tanks Experience of Using Kafka
World of Tanks Experience of Using Kafka
 
SRE vs DevOps
SRE vs DevOpsSRE vs DevOps
SRE vs DevOps
 
Wargaming Clan Platform
Wargaming Clan PlatformWargaming Clan Platform
Wargaming Clan Platform
 
Архитектура мета игры Wargaming. Глобальная карта 2.0.
Архитектура мета игры Wargaming. Глобальная карта 2.0.Архитектура мета игры Wargaming. Глобальная карта 2.0.
Архитектура мета игры Wargaming. Глобальная карта 2.0.
 
Осознанный выбор. Python 3 для реализации сервисного шлюза клиента World of T...
Осознанный выбор. Python 3 для реализации сервисного шлюза клиента World of T...Осознанный выбор. Python 3 для реализации сервисного шлюза клиента World of T...
Осознанный выбор. Python 3 для реализации сервисного шлюза клиента World of T...
 
Кланы в Wargaming. От странички на танковом портале до мультиплатфермнного с...
Кланы в Wargaming. От странички на танковом портале до  мультиплатфермнного с...Кланы в Wargaming. От странички на танковом портале до  мультиплатфермнного с...
Кланы в Wargaming. От странички на танковом портале до мультиплатфермнного с...
 
Оперирование высоко нагруженными проектами. Или "Клановые войны" каждый день
Оперирование высоко нагруженными проектами. Или "Клановые войны" каждый деньОперирование высоко нагруженными проектами. Или "Клановые войны" каждый день
Оперирование высоко нагруженными проектами. Или "Клановые войны" каждый день
 

Grpahite&grafana

  • 1. Использование Graphite и Grafana Левон Авакян / WoT Server Reliability / l_avakyan@wargaming.net Собираем метрики 1 Devops.Events
  • 2. Содержание 2 • Зачем нужно собирать метрики? • Как можно собирать метрики? • Разбираем Graphite по частям • Вопросы производительности. Go-carbon • Graphana. Основные фичи О чем мы будем говорить Devops.Events
  • 3. Зачем нужно собирать метрики? Немного о бизнесе и архитектуре 3 Devops.Events
  • 4. Бизнес 4 Функциональные требования Как мы поймем что делаем правильно? Devops.Events
  • 5. Архитектура 5 Нефункциональные требования Как мы поймем что мы делаем хорошо? Devops.Events
  • 6. Нефункциональные требования 6 То что можем померять runtime • Доступность • Надежность • Расширяемость • Производительность Devops.Events
  • 7. Надежность 7 Мониторинг и все такое Как мы поймем что все технически хорошо? Devops.Events
  • 8. Как можно собирать метрики? Pull&Push стратегии 8 Devops.Events
  • 9. Источники метрик 9 Где брать данные • Логи • БД • Приложение • ОС • Сторонние приложения Devops.Events
  • 10. Pull 10 • Система мониторинга забирает данные у приложения сама Примеры: • Zabbix • Nagios Devops.Events
  • 11. Push 11 • Приложение отправляет данные о себе Примеры: • Prometey • Graphite Devops.Events
  • 12. Graphite Разбираем Graphite по частям 12 Devops.Events
  • 13. Graphite 13 • carbon - Twisted демон, слушающий данные • whisper - Хранилище для временных рядов ( time- series data). Концепция циклический БД • graphite webapp - Веб приложение на основе Django для построения дашбородов Вид изнутри http://graphite.readthedocs.io/en/latest/index.html Devops.Events
  • 15. Graphite 15 • carbon-cache.py - принимает метрики по многим протоколам и как можно быстрее записывает их • carbon-relay.py – репликация и шардинг • carbon-aggregator.py – работает перед carbon-cache, собирая метрики до того как отправить их в хранилище • carbon-aggregator-cache.py – два предыдущих демона в одном Вид изнутри http://graphite.readthedocs.io/en/latest/index.html Devops.Events
  • 16. Переходим к практике А как это работает? 16 Devops.Events
  • 18. Statsd 18 • statsd – простой демон, созданный для того чтобы собирать и агрегировать метрики. • Должна существовать клиентская реализация для работы statsd в приложении. В связи с огромной популярностью формат statsd стал де-факто протоколом для сбора и агрегации метрик. • Приложение по UDP шлет метрики в statsd, сам же statsd собирает их и отправляет на бэкенд. Вид изнутри
  • 19. Statsite 19 Сервер метрик. Реализация statsd на С. (https://github.com/statsite/statsite) • Быстрый и надежный • Минимизирует потребление памяти • Поддерживает большое количество бэкендов Вид изнутри Devops.Events
  • 20. Statsite 20 Пример использования >>> import statsd >>> c = statsd.StatsClient('localhost', 8125) # statsite host and port (udp) >>> c.incr('foo') # Increment the 'foo' counter. >>> c.timing('stats.timed', 320) # Record a 320ms 'stats.timed'. >>> import statsd >>> c = statsd.StatsClient('localhost', 8125, prefix='foo') # statsite host and port (udp) >>> c.incr('bar') # Will be 'foo.bar' in statsite/graphite. Devops.Events
  • 21. Пример реализации для falcon 21 def wrapper(func, timer_name): @wraps(func) def wrapped(*args, **kwargs): with statsd.timer(timer_name): res = func(*args, **kwargs) return res return wrapped class StatsReportingAPI(type): # Use this a a __metaclass__ for any resource you want to automatically report request timings def __new__(meta, classname, bases, classDict): newClassDict = {} for attributeName, attribute in classDict.items(): if attributeName.startswith('on_') and type(attribute) == FunctionType: key = '%s.%s.%s' % ( classDict['__module__'], classname, attributeName ) attribute = wrapper(attribute, key) newClassDict[attributeName] = attribute return type.__new__(meta, classname, bases, newClassDict)
  • 22. Statsite configuration 22 [statsite] port = 8125 udp_port = 8125 log_level = INFO log_facility = local0 flush_interval = 10 timer_eps = 0.01 set_eps = 0.02 stream_cmd = python sinks/statsite_graphite_sink.py graphite_host 2004 your.app.prefix [histogram_api] prefix=api min=0 max=100 width=5 [histogram_default] prefix= min=0 max=200 width=20 Devops.Events
  • 23. Сбрасываем метрики в графит 23 • Читаем stdin. На вход plain text вида key|val|timestampn • Собираем данные, пакуем с помощью pickle • Раз в N секунд отправляем собранные метрики sinks/statsite_graphite_sink.py graphite Devops.Events
  • 25. Работаем в продакшене 25 • Метрик становится больше • Хотим хранить более точные данные • Метрики собираем, посмотреть становится проблематично • Основная проблема I/O Devops.Events
  • 26. Ищем альтернативы 26 carbon-cache go-carbon Использует одно ядро Один демон использует множество ядер Много опций для конфигурации Написан на Go Поставляет в коробке Мало опций для конфигурации Работает примерно в 4 раза быстрее* Devops.Events
  • 27. Ищем альтернативы 27 carbon-relay carbon-ng-relay carbon-c-relay Написан на twisted Написан на Go Написан на С Нативный Web-panel Расширенное управление кластером Лайф апдейты Агригаторы В 2-3 раза быстрее carbon relay* На порядок быстрее carbon-ng-relay* Devops.Events
  • 28. Итоговая конфигурация 28 2M метрик Host HW: 14Tb ssd, Xeon(R) CPU E5-2695 v4 Devops.Events
  • 30. Grafana 30 Open-source решение для построение дашбордов и различных графиков для Graphite, Elastic Search, OpenTSDB, Prometheus and InfluxDB. https://grafana.com/ Devops.Events
  • 31. Grafana 31 • Панели • Графики/Гистограммы • Одиночные метрики • Таблицы • Хитмапы • Списки дашбордов • Дашборды • Шаблонизация дашбордов • Аннотации • Плейлисты • Поиск/шаринг дашбордов • Автоматизированные дашборды • Экспорт/Импорт • JSON модель Основные фичи Devops.Events
  • 32. Grafana 32 • Источники данных • Graphite • Prometheus • Elasticsearch • InfluxDB • OpenTSDB • MySQL • AWS Cloudwatch • TestData • Алертинг ( version > 4.0) • Поддержка правил • Внутрение метрики • Нотификации • Поддержка плагинов Основные фичи Devops.Events

Editor's Notes

  1. Как понимать что фича или система делает, то что мы от нее хотели
  2. Как понима
  3. Скорее требования, которые важны для оперирования.
  4. Лучше посмотреть, что зарание все хорошо
  5. Несколько стратегий для сбора Push - система шлет о себе данные.
  6. Time series data - это приницп хранения данных, когда данные индексированны по времени. То есть какому-то промежутку времени, сооветсвуют какие-то данны