
最近剛好在實作 Prometheus + Grafana 的時候,對 MongoDB 做了容器 CPU 使用率 (container_cpu_usage_seconds_total) 的監控,Metrics 寫法如下:
1
2
3
| sum(
rate(container_cpu_usage_seconds_total{name!~"(^$|^0_.*)"}[1m]))
by (name)
|
從上面的 Metrics 可以拉長時間來看,會發現專案的 MongoDB 非常不穩定,起起伏伏,這時候就需要來看看資料庫到底哪邊慢,以及看看哪個語法造成 CPU 飆高?

接著為了看 MongoDB 的 Log 紀錄,把 Grafana 推出的 Loki,也導入專案系統,將容器所有的 Log 都導向 Loki,底下可以看看 docker-compose 將 Log 輸出到 loki
1
2
3
4
5
6
7
| logging:
driver: loki
options:
loki-url: "http://xxxxxxx/loki/api/v1/push"
loki-retries: "5"
loki-batch-size: "400"
loki-external-labels: "environment=production,project=mongo"
|

先看看結論,做法其實很簡單,找出相對應 Slow Query,把相關的欄位加上 Index,就可以解決了


[Read More]