Мониторинг. Опять, rootconf 2016

113
МОНИТОРИНГ. ОПЯТЬ. Всеволод Поляков

Transcript of Мониторинг. Опять, rootconf 2016

Page 1: Мониторинг. Опять, rootconf 2016

МОНИТОРИНГ. ОПЯТЬ.Всеволод Поляков

Page 2: Мониторинг. Опять, rootconf 2016

Platform Engineer . Grammarly

ctrlok.com

Page 3: Мониторинг. Опять, rootconf 2016

Что такое метрики?

Page 4: Мониторинг. Опять, rootconf 2016
Page 5: Мониторинг. Опять, rootconf 2016
Page 6: Мониторинг. Опять, rootconf 2016

Успешность

Page 7: Мониторинг. Опять, rootconf 2016

Количество

Page 8: Мониторинг. Опять, rootconf 2016

Время

Page 9: Мониторинг. Опять, rootconf 2016
Page 10: Мониторинг. Опять, rootconf 2016

Взаимодействие

Page 11: Мониторинг. Опять, rootconf 2016

Внутренние процессы

Page 12: Мониторинг. Опять, rootconf 2016

Системные метрики

Page 13: Мониторинг. Опять, rootconf 2016

Зачем нужны метрики?

Page 14: Мониторинг. Опять, rootconf 2016

Алерты

Page 15: Мониторинг. Опять, rootconf 2016

Аналитика

Page 16: Мониторинг. Опять, rootconf 2016
Page 17: Мониторинг. Опять, rootconf 2016

Graphite

Page 18: Мониторинг. Опять, rootconf 2016

Default graphite architecture

Page 19: Мониторинг. Опять, rootconf 2016

what?• RRD-like (gram.ly/gfsx)

• so.it.is.my.metric → /so/it/is/my/metric.wsp

• Fixed retention (by name\pattern)

• Fixed size (actually no)

Page 20: Мониторинг. Опять, rootconf 2016

Retention and size• 1s:1d → 1 036 828 bytes

• 10s:10d → 1 036 828 bytes

• 1s:365d → 378 432 028 bytes (1 TB ~ 3 000)

• 10s:365d → 37 843 228 bytes (1 TB ~ 30 000)

whisper calc

Page 21: Мониторинг. Опять, rootconf 2016

Retention and size• 10s:30d,1m:120d,10m:365d → 4 564 864 bytes

• 240 864 metrics in 1 TB

• aggregation: average, sum, min, max, and last.

• can be assign per metric

Page 22: Мониторинг. Опять, rootconf 2016

How• terraform (https://www.terraform.io/)

• docker (https://www.docker.com/)

• ansible (https://www.ansible.com/)

• rocker (https://github.com/grammarly/rocker)

• rocker-compose (https://github.com/grammarly/rocker-compose)

Page 23: Мониторинг. Опять, rootconf 2016

Default graphite architecture

Page 24: Мониторинг. Опять, rootconf 2016

carbon-cache.py

• single-core

• many options in config file

• default

link

Page 25: Мониторинг. Опять, rootconf 2016

architecturecarbon-cache.py

Page 26: Мониторинг. Опять, rootconf 2016

Start load testing• m4.xlarge instance (4 CPU, 16 GB ram, 256 GB disk EBS gp2)

• retentions = 1s:1d

• MAX_CACHE_SIZE, MAX_UPDATES_PER_SECOND, MAX_CREATES_PER_MINUTE = inf

• defaults

• almost 1.5h to get limit :(

Page 27: Мониторинг. Опять, rootconf 2016

carbon-cache.py cache size → 75k m\s

Page 28: Мониторинг. Опять, rootconf 2016
Page 29: Мониторинг. Опять, rootconf 2016
Page 30: Мониторинг. Опять, rootconf 2016

results

• 75 000 m\s max

• 60 000 m\s flagman speed

• I\O :(

Page 31: Мониторинг. Опять, rootconf 2016

Try to tune!

• WHISPER_SPARSE_CREATE = true (don’t allocate space on creation) non-linear I\O load.

• CACHE_WRITE_STRATEGY = sorted (default)

Page 32: Мониторинг. Опять, rootconf 2016

cache size 1k → 195k m\s

Page 33: Мониторинг. Опять, rootconf 2016

results

• 120 000 m\s flagman speed • cache flush problem :(

Page 34: Мониторинг. Опять, rootconf 2016

Try to tune!

• CACHE_WRITE_STRATEGY = max will give a strong flush preference to frequently updated metrics and will also reduce random file-io.

Page 35: Мониторинг. Опять, rootconf 2016

from 1k to 150k

Page 36: Мониторинг. Опять, rootconf 2016

results

• 90 000 m\s flagman speed • cache flush problem :(

Page 37: Мониторинг. Опять, rootconf 2016

Try to tune!

• CACHE_WRITE_STRATEGY = naive just flush. Better with random I\O.

Page 38: Мониторинг. Опять, rootconf 2016

from 45k to 135k

Page 39: Мониторинг. Опять, rootconf 2016

results

• 120 000 m\s flagman speed • still CPU

Page 40: Мониторинг. Опять, rootconf 2016

sorted

max

naive

Page 41: Мониторинг. Опять, rootconf 2016

• Maybe it’s I\O EBS limitation? → 512 GB disk.

• No.

Page 42: Мониторинг. Опять, rootconf 2016

go-carbon

• multi-core single daemon

• written in golang

• not many options to tune :(

link

Page 43: Мониторинг. Опять, rootconf 2016

Start load testing• m4.xlarge instance (4 CPU, 16 GB ram, 256 GB disk EBS gp2)

• retentions = 1s:1d

• max-size = 0

• max-updates-per-second = 0

• almost 1h to get limit :(

Page 44: Мониторинг. Опять, rootconf 2016

1k → 130k m\s ~3k/min

Page 45: Мониторинг. Опять, rootconf 2016
Page 46: Мониторинг. Опять, rootconf 2016

results• 120 000 m\s flagman speed • but it’s without sparse. • try to implement

Page 47: Мониторинг. Опять, rootconf 2016

try to tune! remaining := whisper.Size() - whisper.MetadataSize() whisper.file.Seek(int64(remaining-1), 0) whisper.file.Write([]byte{0}) chunkSize := 16384 zeros := make([]byte, chunkSize) for remaining > chunkSize { // if _, err = whisper.file.Write(zeros); err != nil { // return nil, err // } remaining -= chunkSize } if _, err = whisper.file.Write(zeros[:remaining]); err != nil { return nil, err }

Page 48: Мониторинг. Опять, rootconf 2016

Уже есть в go-carbon

Page 49: Мониторинг. Опять, rootconf 2016

180 000 m\s !

Page 50: Мониторинг. Опять, rootconf 2016
Page 51: Мониторинг. Опять, rootconf 2016

try to tune!

• max update operation = 1500

Page 52: Мониторинг. Опять, rootconf 2016

results

• TLDR 210 000 - 240 000 m\s flagman speed

• 31 000 000 cache size!

Page 53: Мониторинг. Опять, rootconf 2016
Page 54: Мониторинг. Опять, rootconf 2016

try to tune!

• max update operation = 0

• input-buffer = 400 000

Page 55: Мониторинг. Опять, rootconf 2016

results

• 270 000 m\s flagman speed

• 10-20kk cache size!

Page 56: Мониторинг. Опять, rootconf 2016
Page 57: Мониторинг. Опять, rootconf 2016

try to tune!

• vm.dirty_background_ratio=40

• vm.dirty_ratio=60

Page 58: Мониторинг. Опять, rootconf 2016

300 000 req\s

Page 59: Мониторинг. Опять, rootconf 2016

results

• 300 000 m\s flagman speed

• 180k+ m\s ±without cache

Page 60: Мониторинг. Опять, rootconf 2016

Re:Lays

Page 61: Мониторинг. Опять, rootconf 2016

Default graphite architecture

Page 62: Мониторинг. Опять, rootconf 2016

arch forward

Page 63: Мониторинг. Опять, rootconf 2016

arch named\regexp

Page 64: Мониторинг. Опять, rootconf 2016

arch hash

Page 65: Мониторинг. Опять, rootconf 2016

arch hash replicafactor: 2

Page 66: Мониторинг. Опять, rootconf 2016

carbon-relay.py

• twisted based

• native

Page 67: Мониторинг. Опять, rootconf 2016

Start load testing• c4.xlarge instance (4 CPU, 7.5 GB ram)

• ~1 Gb lan

• default parameters

• hashing

• 10 connections

Page 68: Мониторинг. Опять, rootconf 2016

WTF!

Page 69: Мониторинг. Опять, rootconf 2016

carbon-relay-ng• golang-based

• web-panel

• live-updates

• aggregators

• spooling

link

Page 70: Мониторинг. Опять, rootconf 2016

<150 000 req\s

Page 71: Мониторинг. Опять, rootconf 2016

carbon-c-relay

• написан на C

• advanced cluster management

Page 72: Мониторинг. Опять, rootconf 2016

from 100 000 to 1 600 000 req\s

Page 73: Мониторинг. Опять, rootconf 2016

1 400 000 flagman speed. Or not?

Page 74: Мониторинг. Опять, rootconf 2016

Итак…go-carbon + carbon-c-relay = ♡

Page 75: Мониторинг. Опять, rootconf 2016
Page 76: Мониторинг. Опять, rootconf 2016
Page 77: Мониторинг. Опять, rootconf 2016
Page 78: Мониторинг. Опять, rootconf 2016
Page 79: Мониторинг. Опять, rootconf 2016
Page 80: Мониторинг. Опять, rootconf 2016

Контейнеры

Page 81: Мониторинг. Опять, rootconf 2016

Всё перепутано

Page 82: Мониторинг. Опять, rootconf 2016

Различия• Окружение

• Роль

• Трек (Модификатор)

• IP

• Датацентр

• Что-угодно

Page 83: Мониторинг. Опять, rootconf 2016

Теги

Page 84: Мониторинг. Опять, rootconf 2016

TSDB с тегами

• influxDB

• openTSDB (hbase)

• cyanite (cassandra)

• newTS (cassandra)

• Prometheus

Page 85: Мониторинг. Опять, rootconf 2016

(cluster) influx, 130k metric\sувеличить график

Page 86: Мониторинг. Опять, rootconf 2016
Page 87: Мониторинг. Опять, rootconf 2016

openTSDB single instance + hbase cluster = upto 150k metric\s

Page 88: Мониторинг. Опять, rootconf 2016
Page 89: Мониторинг. Опять, rootconf 2016
Page 90: Мониторинг. Опять, rootconf 2016
Page 91: Мониторинг. Опять, rootconf 2016
Page 92: Мониторинг. Опять, rootconf 2016

Compaction

Page 93: Мониторинг. Опять, rootconf 2016
Page 94: Мониторинг. Опять, rootconf 2016

Graphite

Page 95: Мониторинг. Опять, rootconf 2016
Page 96: Мониторинг. Опять, rootconf 2016
Page 97: Мониторинг. Опять, rootconf 2016
Page 98: Мониторинг. Опять, rootconf 2016
Page 99: Мониторинг. Опять, rootconf 2016

Найти уникальное

Page 100: Мониторинг. Опять, rootconf 2016
Page 101: Мониторинг. Опять, rootconf 2016
Page 102: Мониторинг. Опять, rootconf 2016
Page 103: Мониторинг. Опять, rootconf 2016
Page 104: Мониторинг. Опять, rootconf 2016
Page 105: Мониторинг. Опять, rootconf 2016
Page 106: Мониторинг. Опять, rootconf 2016
Page 107: Мониторинг. Опять, rootconf 2016

Работает с Grafana

Page 108: Мониторинг. Опять, rootconf 2016

Zipper

• https://github.com/grobian/carbonserver

• https://github.com/dgryski/carbonzipper

• https://github.com/dgryski/carbonapi

Page 109: Мониторинг. Опять, rootconf 2016
Page 110: Мониторинг. Опять, rootconf 2016
Page 111: Мониторинг. Опять, rootconf 2016

ALSO

• https://github.com/jssjr/carbonate

• https://github.com/jjneely/buckytools

• https://github.com/dgryski/carbonmem

• https://github.com/grobian/carbonwriter

Page 112: Мониторинг. Опять, rootconf 2016

Планы

• Патч statsd → ES

• Патч carbonserver → carbonlink

Page 113: Мониторинг. Опять, rootconf 2016

feel free to ask• Vsevolod Polyakov

[email protected]

• skype: ctrlok1987

• github.com/ctrlok

• twitter.com/ctrlok

• slack: HangOps

• Gitter: dev_ua/devops

• skype: DevOps from Ukraine

• slack.ukrops.club

Мы хайрим!