prometheus是一款短期監(jiān)控軟件,他在云計算領(lǐng)域有很高的應(yīng)用,與容器技術(shù)融合度非常高秕衙,在此我嘗試使用prometheus監(jiān)控docker容器迁央,并自動發(fā)現(xiàn)新容器掷匠。
安裝prometheus
創(chuàng)建配置文件
非容器版本的prometheus非常好部署,解壓完就可以用了漱贱,但是docker中的就比較繁瑣槐雾,我們需要提前準(zhǔn)備要映射的配置文件。
在任意路徑下創(chuàng)建prometheus.yml
vim prometheus.yml
文件內(nèi)容如下:
(這個文件內(nèi)容是我從容器中復(fù)制出來的幅狮,沒有多余的東西募强,但保證不報錯)
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
運(yùn)行容器
docker run -itd -p 9090:9090 \
-v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
--name prometheus \
prom/prometheus
參數(shù) | 釋義 |
---|---|
-i | 以交互模式運(yùn)行容器株灸,通常與 -t 同時使用 |
-t | 為容器重新分配一個偽輸入終端,通常與 -i 同時使用 |
-d | 后臺運(yùn)行容器并返回容器ID擎值,沒有此參數(shù)終端會被容器占用 |
-p | 映射端口慌烧,冒號前是宿主機(jī),冒號后是容器 |
-v | 映射路徑/文件鸠儿,映射文件的話宿主機(jī)中必須存在這個文件 |
--name | 指定容器名稱 |
如果出現(xiàn)任何容器閃退的現(xiàn)象通過查看容器日志定位錯誤
docker logs --tail=10 prometheus(容器名)
#10行不夠可以多來點(diǎn)
然后查看鏡像是否在運(yùn)行屹蚊,在瀏覽器上輸入IP:9090,能顯示出頁面表示容器正常運(yùn)行进每。
安裝cAdvisor
prometheus無法獨(dú)自收集容器信息汹粤,所以需要cAdvisor,同時他還可以完成自動發(fā)現(xiàn)容器的任務(wù)田晚。
docker run -itd --name cadvisor -p 9001:8080 \
-v /:/rootfs:ro \
-v /var/run:/var/run:rw \
-v /sys:/sys:ro \
-v /var/lib/docker/:/var/lib/docker:ro \
-v /dev/disk/:/dev/disk:ro \
google/cadvisor
我宿主機(jī)上的8080端口有別的用處嘱兼,所以映射了9001,另外這里的路徑映射每一行具體什么作用我不太清楚贤徒,希望有大佬可以指點(diǎn)指點(diǎn)芹壕。
安裝完之后瀏覽器輸入IP:9001,如果能看到下面這個貓頭鷹則表示成功運(yùn)行接奈。
安裝node-exporter
cAdvisor采集到的信息需要讓node-exporter采集到踢涌,然后才能被prometheus獲取到,所以需要在docker中安裝node-exporter序宦。
docker run -d -p 9100:9100 --name node-exporter \
-v "/proc:/host/proc" \
-v "/sys:/host/sys" \
-v "/:/rootfs" \
-v "/etc/localtime:/etc/localtime" \
prom/node-exporter \
--path.procfs /host/proc \
--path.sysfs /host/sys \
--collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"
同樣這里的路徑映射我也不太明白睁壁,需要注意的一點(diǎn),--path.procfs挨厚、--path.sysfs和--collector.filesystem.ignored-mount-points這三個參數(shù)必須放在最后面堡僻,否則docker會報錯。
然后通過瀏覽器輸入IP:9100/metrics來訪問疫剃,如果能看到各項指標(biāo)的參數(shù)表示啟動成功钉疫,像下圖一樣。
修改配置文件
現(xiàn)在node-exporter已經(jīng)可以采集到容器信息了巢价,就差prometheus去node-exporter上拉取數(shù)據(jù)了牲阁,所以我們需要在prometheus的配置文件中配置需要拉取數(shù)據(jù)的node-exporter。
將scrape_configs部分的內(nèi)容修改一下壤躲,注意targets后面的IP和端口號城菊。
scrape_configs:
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090','cadvisor宿主機(jī)IP:9001','node-exporter宿主機(jī)IP:9100']
這里要注意一點(diǎn),如果cadviosr碉克、node-exporter和prometheus在同一臺宿主機(jī)上凌唬,那么cadvisor和noed-exporter的IP不可以寫localhost,一定要寫IP漏麦,具體機(jī)制不太清楚客税。推測可能是因?yàn)閜rometheus就在容器里况褪,如果填localhost的話相當(dāng)于訪問容器自身,所以自然無法獲取到數(shù)據(jù)更耻。
最后刪除prometheus容器重建來重載配置文件测垛。
網(wǎng)上有說通過curl -XPOST http://ID:9090/-/reload來重載配置,這需要在啟動容器的時候各位添加參數(shù)并指定yml文件秧均,但我測試的時候沒好使……有時間再研究研究食侮。
安裝grafana
數(shù)據(jù)已經(jīng)收集完成,現(xiàn)在只差將需要的數(shù)據(jù)展示出來目胡,畢竟不能用promQL語言一個一個去查詢锯七。
同樣運(yùn)行docker命令
docker run -itd --name grafana -p 3000:3000 grafana/grafana
我映射了3000端口,然后就可以用瀏覽器訪問這個端口讶隐,進(jìn)入到grafana的界面起胰。
初始用戶名和密碼都是admin久又,初次登陸系統(tǒng)需要更改密碼巫延。
登錄成功后就可以看到grafana頁面,首先需要配置數(shù)據(jù)源地消,我忘記有沒有引導(dǎo)了炉峰,這里我直接新建數(shù)據(jù)源。
它作為一個可視化的工具非常強(qiáng)悍,展示的儀表版可以隨意定制巫橄,但好像挺麻煩的樣子淘邻,我就不去弄了,直接使用別人制作好的儀表板湘换。
點(diǎn)擊左側(cè)加號宾舅,選擇import這是docker儀表板193的展示結(jié)果
目前先到這里哥谷,之后我再更新alertmanager的安裝與配置……不知道要等多久岸夯。