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

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

Jan 22, 2018

Download

Engineering

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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

Мы хайрим!