Denis
Тебе строить отчёты по данным из монги ?
Oleg
задача такая чтоб получить по данным аналитику отчеты
Oleg
дада
Denis
Есть такая тулза называется redash у нее есть коннектор к монге вроде
Denis
Это такой bi для бедных
Oleg
спасибо, сейчас буду глядеть шо эта
Alexey
привет всем. есть еще вот такая приблуда: https://github.com/nightw/mikoomi-zabbix-mongodb-monitoring
Alexey
тарищи, а подскажите пару вопросов по монге. Как называется метрика аналог число select, как в mysql, Только в монге?
Alexey
в serverStatus ТОлько delete,updateб insert
yopp
db.serverStatus()["metrics"]["commands"]["find"]
yopp
правда я не помню куда попадает findAndModify, кажется в update
yopp
Latest: 3.4.2, Stable: 3.2.12. Пришло время обновлятся до 3.4.1+: https://aphyr.com/posts/338-jepsen-mongodb-3-4-0-rc3
Alexey
правда я не помню куда попадает findAndModify, кажется в update
ага. спасибо то есть find попадает в opCounters в update?
yopp
нет, find это просто команды на чтения. а findAndModify это одна команда на найти и обновить
yopp
в opcounters скорее всего ты ищешь query
yopp
"query" : 959956, "find" : { "failed" : NumberLong(0), "total" : NumberLong(959913) },
yopp
ну близко
Alexey
Мне скорее нужно понять что делает база, когда я вижу рост чтения на диске и пейджфолты
yopp
%)
yopp
надо уже сесть и дописать экспортер
yopp
Мне скорее нужно понять что делает база, когда я вижу рост чтения на диске и пейджфолты
На свой страх и риск можно попробовать вот это: https://github.com/y8/mongo_collection_exporter
yopp
нужен прометей и графана
yopp
и jre7/8
yopp
и монга 3.2.10+
yopp
на 3.0.x/3.2.10- тоже почти всё будет работать, но там не будет метрик по тому как конкретной коллекцией/индексами кеш используются (wt cache usage)
Alexey
у меня счетчики экспортируются в zabbix траппом, потом через плагин в графане отрисовываюится уже
yopp
забикс не умеет собирать статистику по кокнетным коллекциям/индексам afaik
Alexey
а он сам не собирает, собирает скрипт, а потом уже кидает в айтемы, а из них выводит в графане
Alexey
тот же серверстатус можно парсить каким-нибудь jq
yopp
там не serverStatus пасить надо
yopp
а collStats для всех коллекций
Alexey
а что?
Alexey
ну ок... какая разница что парсить
yopp
иначе толку от того что ты будешь знать что «монга пишет в/из кеша»
yopp
ну да, я тебе по твоим симптомам могу сказать что пишет!
Alexey
это же через mongo -e"collstat()" длается все равно?
yopp
больше скажу: монга делает больше io чем может прожевать сторадж!
yopp
это же через mongo -e"collstat()" длается все равно?
нет, это делается в три этапа: получить список всех баз
yopp
потом получить список коллекций в базе
yopp
потом пройти по всем коллекциям
Alexey
ну праивльно. через LLD в заббикс делаем индекс, потом каждой делаем колстат и в айтем
Alexey
автообнаружение называется
yopp
и сделать db.getCollection(<name>).stats({indexDetails: 1})
yopp
а потом парсить каждый документ в стате индексов :)
yopp
можешь взять логику из экспортера
yopp
пионерам бесполезно предлагать готовое решение :)
Alexey
да, я именно так и считаю кол-во записей в коллекции
yopp
но вобщем развлекайся, мне заббикс не интересен совершенно, я готов на практические вопросы ответить
Alexey
да не важно, главное понять что считать
yopp
всё
yopp
тебе в идеале нужно распарсить весь документ со статой в метрики
yopp
что-то в духе ~200 метрик на коллекцию + ~200 на каждый индекс (сходу ~400)
yopp
потом разобраться в метриках и сделать себе дешборд и алерты на нужные метрики
Alexey
да сделано уже, просто метрики по файнду добавлю и все. если надо фильтр включу, чтоб только нужные выгружались. Мне надо было просто понять какая метрика за find отвечает, т. к. не нашел ее а оппкаунтерах
yopp
тебе от find не холодно и не жарко
yopp
тебе serverStatus() тут не поможет
Alexey
ок. а что мне нужно искать?
yopp
это слишком общие метрики, которые ничего кроме «плохо/хорошо» вообще сказать не могут
yopp
нужно анализировать метрики из _каждой коллекции_
Alexey
вот вижу я что растет чтение на диске, растет Iowait, есть всплески педжфолтов. Какая дальше должна быть стратегия?
yopp
минимальный набор: программа минимум (ключ wiredtiger в stats(): "cache" : { "bytes currently in the cache" : 710342011, "bytes read into cache" : 496185602, "bytes written from cache" : 161808640, "internal pages evicted" : 0, "modified pages evicted" : 14, "unmodified pages evicted" : 0 } "block-manager" : { "checkpoint size" : 194146304, "file size in bytes" : 185212928, "file bytes available for reuse" : 28672, } "cursor" : { "bulk-loaded cursor-insert calls" : 0, "create calls" : 25, "cursor-insert key and value bytes inserted" : 168862327, "cursor-remove key bytes removed" : 0, "cursor-update value bytes updated" : 0, "insert calls" : 1257539, "next calls" : 11398715, "prev calls" : 1, "remove calls" : 0, "reset calls" : 1812770, "restarted searches" : 10372, "search calls" : 466189, "search near calls" : 89095, "truncate calls" : 0, "update calls" : 0 }
yopp
более того, затык может быть в индексах
yopp
так что тебе эти данные нужно ещё по _каждому индексу_ в каждой коллекции собирать
yopp
(аргумент {indexDetails: 1})
yopp
потом включить профайлер и смотреть какие конкретно запросы затыкают и поддержать их индексами или порезать индексы чтоб они все в память вмещались
yopp
но обычно по графикам сразу видно примерно что происходит
Alexey
найти какая коллекция или индекс задыхается
Как понять, что она задыхается? Какие метрики смотреть в статистике?
yopp
я тебе выше скинул метрики
Alexey
кеш - это про то, что коллекция влезает в кеш или нет, я правильно понимаю?
yopp
в третий раз повторяю: по всем базам, по всем коллекциям, нужно сделать db.getCollection(<name>).stats({indexDetails: 1}) и распарсить ключ wiredtiger и indexDetails (в котором ключом будет название индекса, а значением будет примерно тоже самое что в wiredtiger)
yopp
сами документы могут и не влезать в кеш, это не страшно
yopp
(в большинстве случаев)
yopp
а вот если индексы не влезают — очень страшно
yopp
потому что на каждый запрос монга будет проезжать по дереву, а дерево частично будет на диске и оппа, мы упираемся в iops диска сходу
yopp
причём упираемся обычно худшим способом: evict modified, а это записать минимум несколько блоков на диск, а потом чтение нужного
Alexey
ну хорошо, допустим я сделаю, соберу данные, вот те, что выше ты скинул. Дальше что? какая из этих метрик мне будет говорить, что мы поехали по диску?
yopp
ты будешь видеть три вещи