1、安装docker
1、进入root用户保证有足够的权限
sudo -i
2、创建目录:
sudo mkdir -p /etc/docker
3、配置镜像加速:
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
EOF
4、设置变量:
export DOWNLOAD_URL="http://mirrors.163.com/docker-ce"
5、安装curl下载工具:
snap install curl
6、安装docker:
curl -fsSL https://get.docker.com/ | sh
7、查看版本信息
docker -v
8、查看docker运行状态
systemctl status docker
9、安装docker-compose
curl -SL https://github.com/docker/compose/releases/download/v2.23.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
10、授权:
sudo chmod +x /usr/local/bin/docker-compose
11、查看信息:
docker-compose -v
2、docker-compose安装Prometheus
注意:以下操作尤其是创建配置文件添加文件里的内容的时候一定要注意缩进
1、切换到root用户
sudo -i
2、创建监控文件:
mkdir /data/docker-prometheus -p
3、连级创建目录:
mkdir /data/docker-prometheus/{grafana,prometheus,alertmanager} -p
4、进入到件监控文件内:
cd /data/docker-prometheus/
5、创建alert manager报警配置
vim alertmanager/config.yml
global:
#163服务器
smtp_smarthost: 'smtp.163.com:465'
#发邮件的邮箱
smtp_from: 'yuansui@163.com'
#发邮件的邮箱用户名,也就是你的邮箱
smtp_auth_username: 'yuansui@163.com'
#发邮件的邮箱密码
smtp_auth_password: '123456'
#进行tls验证
smtp_require_tls: false
route:
group_by: ['alertname']
#当收到告警的时候,等待group_wait配置的时间,看是否还有告警,如果有就一起发出去
group_wait: 10s
#如果上次告警信息发送成功,此时又来了一个新的告警数据,则需要等待group配置的时间才可以发送出去
group_interval: 10s
#如果上次告整信息发送成功,且问题没有解决,则等待 repeat_interval配置的时间再次发送告警数据
repeat_interval: 10m
# 全局报警组,这个参数是必选的
receiver: email
receivers:
- name: 'email'
email_configs:
- to: 'yuansui@163.com'
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
解释:
全局配置部分
- smtp_smarthost: 指定用于发送电子邮件的 SMTP 服务器地址和端口。
- smtp_from: 指定发件人的邮箱地址。
- smtp_auth_username: 指定用于 SMTP 身份验证的邮箱用户名。
- smtp_auth_password: 指定用于 SMTP 身份验证的邮箱密码。
- smtp_require_tls: 指定是否需要使用 TLS 进行安全连接,应该设置为 true 以确保安全连接。
告警路由配置部分
- group_by: 告警信息按照哪些标签进行分组,这里是按照 alertname 标签进行分组。
- group_wait: 告警触发后等待一定时间,看是否还有相同告警,如果有则一起发送。
- group_interval: 如果上次告警信息发送成功,此时又来了一个新的告警数据,需要等待的时间才可以发送出去。
- repeat_interval: 如果上次告警信息发送成功且问题没有解决,则等待一定时间再次发送告警数据。
- receiver: 全局报警接收者,指定了默认的接收者为 email。
接收者配置部分
- 定义了一个名为 email 的接收者,配置了发送邮件的相关信息,包括收件人邮箱地址等。
抑制规则部分
- 定义了抑制规则,当源告警的严重程度为 'critical' 时,目标告警的严重程度为 'warning',并且告警名称、开发环境和实例都相同时,执行抑制。
6、配置grafana配置文件
vim grafana/config.monitoring
GF_SECURITY_ADMIN_PASSWORD=admin
GF_USERS_ALLOW_SIGN_UP=false
解释:
GF_SECURITY_ADMIN_PASSWORD=admin
表示grafana登陆密码是admin
GF_USERS_ALLOW_SIGN_UP=false
是禁止用户自行注册新的账号。
7、创建Prometheus配置文件
vim prometheus/prometheus.yml
# 全局配置
global:
scrape_interval: 15s # 将搜刮间隔设置为每15秒一次,默认是1分钟
evaluation_interval: 15s # 每15秒评估一次规则,默认是一分钟
# Alertmanager 配置
alerting:
alertmanagers:
- static_configs:
- targets: ['alertmanager:9093']
# 报警(触发器)配置
rule_files:
- "alert.yml"
# 搜刮配置
scrape_configs:
- job_name: 'prometheus'
# 覆盖全局默认值,每15秒从该作业中刮取一次目标
scrape_interval: 15s
static_configs:
- targets: ['localhost:9090']
- job_name: 'cadvisor'
scrape_interval: 15s
static_configs:
- targets: ['cadvisor:8080']
labels:
instance: Prometheus服务器
- job_name: 'node-exporter'
scrape_interval: 15s
static_configs:
- targets: ['node_exporter:9100']
labels:
instance: Prometheus服务器
解释:
全局配置部分定义了scrape_interval和evaluation_interval,分别表示搜刮间隔和评估规则的间隔时间。
报警配置中指定了Alertmanager的地址和端口。
搜刮配置中定义了三个作业(job):
prometheus作业覆盖了全局默认值,将搜刮间隔设置为每15秒一次,从localhost:9090进行搜刮。
cadvisor作业指定了搜刮间隔为15秒,从cadvisor:8080进行搜刮,并为该作业添加了一个标签instance: Prometheus服务器。
node-exporter作业同样指定了搜刮间隔为15秒,从node_exporter:9100进行搜刮,并添加了一个标签instance: Prometheus服务器。
8、创建告警配置
vim prometheus/alert.yml
groups:
- name: Prometheus alert
rules:
- alert: 服务告警
expr: up == 0
for: 30s
labels:
severity: critical
annotations:
summary: "服务器异常,实例: {{ $labels.instance }}"
description: "{{ $labels.job }} 服务器已关闭"
解释:
name字段指定了告警组的名称为Prometheus alert。
rules字段下面定义了一个名为服务告警的告警规则:
expr指定了告警规则表达式,即当up指标的值为0时触发告警。
for字段指定了在多长时间内连续出现该情况才会触发告警,这里设置为30秒。
labels字段下面指定了告警级别severity为critical。
annotations字段下面定义了告警的摘要和描述信息,使用了{{ $labels.instance }}和{{ $labels.job }}等模板变量来展示具体的实例和作业名称
9、创建docker-compose配置
vim docker-compose.yaml
version: '3.3'
volumes:
prometheus_data: {}
grafana_data: {}
networks:
monitoring:
driver: bridge
services:
prometheus:
image: ubuntu/prometheus
container_name: prometheus
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- ./prometheus/:/etc/prometheus/
- prometheus_data:/prometheus
command:
- '--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'
# 热加载配置
- '--web.enable-lifecycle'
# api配置
#- '--web.enable-admin-api'
# 历史数据最大保留时间,默认15天
- '--storage.tsdb.retention.time=20d'
networks:
- monitoring
links:
- alertmanager
- cadvisor
- node_exporter
expose:
- '9090'
ports:
- 9090:9090
depends_on:
- cadvisor
alertmanager:
image: prom/alertmanager
container_name: alertmanager
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- ./alertmanager/:/etc/alertmanager/
command:
- '--config.file=/etc/alertmanager/config.yml'
- '--storage.path=/alertmanager'
networks:
- monitoring
expose:
- '9093'
ports:
- 9093:9093
cadvisor:
image: google/cadvisor
container_name: cadvisor
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
networks:
- monitoring
expose:
- '8080'
node_exporter:
image: prom/node-exporter
container_name: node-exporter
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc|rootfs/var/lib/docker)($$|/)'
networks:
- monitoring
ports:
- '9100:9100'
grafana:
image: grafana/grafana
container_name: grafana
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- grafana_data:/var/lib/grafana
- ./grafana/provisioning/:/etc/grafana/provisioning/
env_file:
- ./grafana/config.monitoring
networks:
- monitoring
links:
- prometheus
ports:
- 3000:3000
depends_on:
- prometheus
解释:
在这个配置中,prometheus服务是核心组件,它使用prom/prometheus:v2.45.1镜像,并将配置文件挂载到./prometheus/目录。它还定义了一些命令行参数来配置Prometheus,如--config.file指定了配置文件路径,--storage.tsdb.path指定了数据存储路径,--web.enable-lifecycle启用了热加载配置等。此外,prometheus服务通过depends_on字段依赖于cadvisor服务,这意味着在启动prometheus之前,会先启动cadvisor。
alertmanager服务使用prom/alertmanager:v0.26.0镜像,并将配置文件挂载到./alertmanager/目录。它定义了--config.file参数来指定配置文件路径,--storage.path参数指定了数据存储路径。
cadvisor服务使用goole/cadvisor:latest镜像,它是一个容器资源使用监控工具。
node_exporter服务使用prom/node-exporter:v1.7.0镜像,它用于导出主机的各种监控指标。
最后,grafana服务使用grafana/grafana:10.1.1镜像,它是一个流行的开源监控仪表板和可视化工具。它将配置文件挂载到./grafana/provisioning/目录,并使用./grafana/config.monitoring文件中定义的环境变量进行配置。它通过depends_on字段依赖于prometheus服务,并将端口3000映射到主机。
10、检查docker-compose.yaml 文件配置是否正确
docker-compose config -q #检查配置有问题才有输出
11、启动docker-compose
docker-compose up -d #启动所有docker-compose服务并后台运行
12、查看是否启动成功
docker ps
13、访问web页面查看
Prometheus访问地址:
http://192.168.1.144:9090 无用户名和密码
grafana访问地址:
http://192.168.1.144:3000 用户名密码 admin/admin
alter manager访问地址:
http://192.168.1.144:9093 无用户名和密码
node_exporter访问地址:
http://192.168.1.144:9100/metrics 无用户名和密码
3、使用grafana展示Prometheus图形
1、登陆到grafana的web页面
2、选择添加数据源
3、设置适当的Prometheus服务器url(例如:http://prometheus:9090)
4、点击“保存并测试”以保存新的数据源
5、导入仪表盘
完成