手把手式小白入门 prometheus
与grafana
监控零碎搭建
整体架构
采集与监控流程
- 存在一个具体的主机或者服务,存在一些能够被采集的指标,比方
linux
零碎下面的CPU
内存等指标 - 部署了对应服务或主机的采集程序
Exporter
,该程序同时提供一个对外裸露的http
接口用于提供采集到的数据,通常是凋谢一个http://{host}:{port}/metrics
接口 Prometheus
负责定期数据收集,存储以及对外提供查问服务grafana
提供监控数据可视化面板(dashboard
),用于监控数据精美展现
docker
服务配置
新建 compose.yaml
如下
services:
prometheus:
image: prom/prometheus:latest
container_name: demo-prometheus
restart: unless-stopped
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus
networks:
- demo
grafana:
image: grafana/grafana-enterprise:latest
container_name: demo-grafana
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- grafana-data:/var/lib/grafana
- grafana-config:/etc/grafana
networks:
- demo
node-exporter:
image: quay.io/prometheus/node-exporter:latest
container_name: demo-node-exporter
command:
- '--path.rootfs=/host'
network_mode: host
pid: host
restart: unless-stopped
volumes:
- '/:/host:ro,rslave'
networks:
demo:
name: "demo"
external: false
volumes:
grafana-data: {}
grafana-config: {}
prometheus-data: {}
提供三个服务
-
prometheus
服务,用于收集metrics
数据- 默认凋谢
9090
端口 ./prometheus.yml:/etc/prometheus/prometheus.yml
:须要内部挂载一个配置文件到容器指定地位,用于定义采集服务的信息等(该文件前面会具体解释)-
prometheus-data:/prometheus
: 须要把保留的数据挂载进去,免得容器再次启动时数据失落通过执行如下命令能够大抵晓得数据卷地位,能够看到镜像定义的
volumes
的参数只有/prometheus
,启动命令中也看不到由别的什么须要长久化的数据门路,剩下的
/etc/prometheus/
,/usr/share/prometheus/
能够在查看后自行感觉是否挂载$ docker image inspect prom/prometheus:latest ... "Cmd": [ "--config.file=/etc/prometheus/prometheus.yml", "--storage.tsdb.path=/prometheus", "--web.console.libraries=/usr/share/prometheus/console_libraries", "--web.console.templates=/usr/share/prometheus/consoles" ], "Image": "sha256:c306a8110e4d13dbe51ddeb37b0746b6238819256a338d1cc5d226e04b02a06a", "Volumes": {"/prometheus": {} },
- 默认凋谢
-
grafana
服务- 默认凋谢端口
3000
-
volumes
参数:查看容器信息如下,发现门路较多,所以目前只挂载
/var/lib/grafana
以及/etc/grafana
$ docker image inspect grafana/grafana-enterprise ... "Env": [ "GF_PATHS_CONFIG=/etc/grafana/grafana.ini", "GF_PATHS_DATA=/var/lib/grafana", "GF_PATHS_HOME=/usr/share/grafana", "GF_PATHS_LOGS=/var/log/grafana", "GF_PATHS_PLUGINS=/var/lib/grafana/plugins", "GF_PATHS_PROVISIONING=/etc/grafana/provisioning" ], "Cmd": null, "Image": "","Volumes": null,
- 默认凋谢端口
-
node-exporter
作为采集程序(prometheus
组织官网提供专门用于采集主机服务指标的程序,能够采集CPU
,内存,磁盘,网卡等性能数据)- 网络模式应用
host
模式以便获取到宿主机实在网卡信息 pid
配置为host
与宿主机应用雷同的pid
命名空间,这样能够获取到宿主机所有程序信息- 以只读形式挂载零碎根目录到容器当中,用于获取零碎磁盘数据,否则容器外部获取的是容器外部磁盘信息导致数据谬误
- 服务默认凋谢端口 9100,当初能够去浏览器拜访地址
http://127.0.0.1:9100/metrics
查看该服务采集到的零碎数据 -
metrics
提供的数据模式如下第一行是
# HELP
结尾,用于解释以后指标的含意第二行是
# TYPE
结尾,阐明以后指标的数据类型剩下的就是具体采集到的数据
# HELP node_cooling_device_cur_state Current throttle state of the cooling device # TYPE node_cooling_device_cur_state gauge node_cooling_device_cur_state{name="0",type="Processor"} 0 node_cooling_device_cur_state{name="1",type="Processor"} 0 node_cooling_device_cur_state{name="10",type="Processor"} 0 node_cooling_device_cur_state{name="11",type="Processor"} 0 node_cooling_device_cur_state{name="12",type="intel_powerclamp"}
- 网络模式应用
prometheus
采集配置
与下面的 compose.yaml
文件雷同目录下,新建 prometheus.yml
文件,该文件会被挂载到 prometheus
容器当中
global:
# 配置全局默认收集 metrics 距离
scrape_interval: 15s
# 当与内部零碎通信的时候,会把该配置下的 `label` 信息附加到数据中
external_labels:
monitor: 'codelab-monitor'
# 收集数据的配置
scrape_configs:
# 定义收集 job 名称,此处采集 prometheus 本人自身的 metrics
- job_name: 'prometheus'
# 收集距离会笼罩下面的全局配置
scrape_interval: 5s
# 配置采集的 http 的接口地位,这个中央只须要填写 IP 和端口即可
# 采集的时候 prometheus 会加上 url 门路拜访 http://localhost:9090/metrics 获取数据
static_configs:
- targets: ['localhost:9090']
- job_name: 'host-node'
static_configs:
- targets: ['172.17.0.1:9100']
host-node
解释
- 该采集程序是由
compose.yaml
文件中配置的服务node-exporter
提供的,凋谢 9100 端口 -
因为其处于
host
宿主机网络命名空间,而prometheus
处于docker
外部的一个桥接网络demo
网络环境中,所以不能通过127.0.0.1
或者node-exporter
拜访到对应的node-exporter
采集程序,所以targets
参数须要填写docker0
的IP
来示意宿主机网络空间下的prometheus
查看
docker0
的IP
如下,个别在linux
上装置docker
之后,默认docker0
网卡的IP
是固定的172.17.0.1
,其余操作系统或环境可能是别的IP
,此处配置须要具体注意,依照理论的IP
地址批改$ ip addr show docker0 14: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:49:57:88:25 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever
服务启动
$ docker compose up -d
[+] Running 7/7
⠿ Network demo Created 0.1s
⠿ Volume "prom_prometheus-data" Created 0.0s
⠿ Volume "prom_grafana-data" Created 0.0s
⠿ Volume "prom_grafana-config" Created 0.0s
⠿ Container demo-grafana Started 0.5s
⠿ Container demo-node-exporter Started 0.2s
⠿ Container demo-prometheus Started 0.4s
查看 docker
网络命名空间
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
61ff0fdec0df demo bridge local
0812cab7929c host host local
....
查看 demo
网络命名空间外面的容器
$ docker network inspect demo
[
{
"Name": "demo",
....
"Containers": {
"774dd4e703f541872b5ed513996020c4e2239694663df62b50c5c83451938368": {
"Name": "demo-grafana",
"EndpointID": "73c2c67e833446363cdde52b2536d9981ca6b813342638697616bfce42bc1e6f",
"MacAddress": "02:42:c0:a8:a0:02",
"IPv4Address": "192.168.160.2/20",
"IPv6Address": ""},"ed204573a64bc2601f4310cb5dbfe4952ac1c2b310a218ced63b578ff6ef49dc": {"Name":"demo-prometheus","EndpointID":"f8e4f5c42ccfdd2387f9a76392f3e6bbcbba1efe850a8392fdcbf47cafe29a09","MacAddress":"02:42:c0:a8:a0:03","IPv4Address":"192.168.160.3/20","IPv6Address":""}
},
....
]
查看 docker host
网络命名空间的容器
$ docker network inspect host
[
{
"Name": "host",
...
"Containers": {
"bde02aced39fd6bfc6017647b05d187d1eb94b5f7155cb026bead1cbc9038d19": {
"Name": "demo-node-exporter",
"EndpointID": "07d90ac1f8ebc897035c0cfde1b54210c85c442ea2125625c4f32090e3e28700",
"MacAddress": "","IPv4Address":"",
"IPv6Address": ""
}
},
...
}
]
采集程序服务验证
prometheus
服务自带采集程序,浏览器拜访地址http://localhost:9090/metrics
查看是否返回数据node-exporter
凋谢端口 9100,浏览器拜访地址http://localhost:9100/metrics
查看是否返回数据
grafana
减少dasboard
拜访 http://localhost:3000/
进入到 grafana
登录页面,输出账号密码 admin/admin
登录
导航到 Configuration/Data Sources
,新增一个data source
,点击Add data source
按钮之后在弹出的列表当中抉择Prometheus
填写根本的名称参数以及 Prometheus
的地址
因为 grafana
以及 prometheus
都处于 docker
的demo
网络环境中,所以在填写 prometheus
的IP
地址时须要间接填写 prometheus
进行拜访
填写实现之后点击最上面的 Save & test
按钮
最初点击 Dashboards
配置图表,发现有三个默认的图表,间接点击 import
即可
最初保留退出,去拜访 Dashboards/Browse
查看图表
目前因为 Grafana metrics
没有被蕴含到 prometheus
的采集配置 yml
文件中,所以该图表是没有数据的,当初能够点击 Prometheus 2.0 stats
查看图表
grafana
减少 node exporter
的dashboard
首先去拜访 grafana
的dashborads
库 https://grafana.com/grafana/dashboards/
获取一个 node exporter
的配置 json
文件
之后回到 grafana
的页面点击 Import
按钮,在弹出的新页面中导入下载的 json
,能够间接上传json
或者拖动 json
文件到页面
最初配置抉择数据源 Prometheus
,配置实现之后点击Import
按钮
最初 Dashboard
的列表页面就新增实现了 Node Exporter Full
的选项,点击进去就看到了 node exporter
的数据图表
至此,服务启动与根本配置实现
参考浏览
prometheus/node_exporter
我的项目仓库readme.md
Prometheus Getting Started
官网文档
grafana
图表库