1.Docker安装
- 简单命令学习
docker images
docker search
docker ps
- docker pull 镜像:版本
- docker rmi 镜像ID / docker rm -f $(docker ps -a -q)
- docker run -d -p 外部端口:内部端口 容器ID
- docker stop/start/kill 容器ID
- docker inspect 容器ID
- docker container logs 容器ID
- docker top 容器ID
- docker cp 容器ID:容器内部的文件路径: 宿主机路径
- docker exec -it 容器ID /bin/bash
DockerFile
-
docker build -t 镜像名称:版本 -f dockerFile文件
# 基于哪个镜像 From java:8 # 复制文件到容器 ADD microservice-eureka-server-0.0.1-SNAPSHOT.jar /app.jar # 声明需要暴露的端口 EXPOSE 8761 # 配置容器启动后执行的命令 ENTRYPOINT ["java","-jar","/app.jar"]
-
docker run -m 500M redis #限制容器的最大使用内存为500M
-
docker stats # 返回容器资源的实时使用情况,1秒刷新一次
-
docker stats --no-stream # 返回容器当时的资源使用情况
-
使用 -v 可以挂载一个主机上的目录到容器的目录
-
docker run -p 外部端口:内部端口 -v 宿主机路径:容器路径 容器ID
-
docker tag 镜像名 分组/镜像名
-
docker push 分组/镜像名
-
docker container rm 容器ID
-
https://cloud.tencent.com/developer/article/1678621
入门 : https://www.cnblogs.com/chanshuyi/p/01_head_first_of_prometheus.html
https://mingshan.fun/2020/07/17/prometheus-install/
https://www.kancloud.cn/willseecloud/prometheus/1904355
-
拉取镜像
docker pull prom/node-exporter docker pull prom/prometheus docker pull grafana/grafana
-
安装运行 Prometheus 服务端
Prometheus 服务端负责数据的收集,因此我们应该首先安装并运行 Prometheus Server
# 创建目录 mkdir /opt/metrics/prometheus cd /opt/metrics/prometheus #先启动一个prometheus容器,copy一份prometheus.yml配置文件,进行挂载修改配置文件 docker run -d -p 9090:9090 --name prometheus --net=host prom/prometheus #先基于prom/prometheus镜像随便运行一个容器,我们需要将其主配置文件复制一份进行更改 [root@docker01 ~]# docker cp prometheus:/etc/prometheus/prometheus.yml /opt/metrics/prometheus/ #复制prometheus容器中的主配置文件到宿主机本地 #停止临时容器prometheus [root@docker01 ~]# docker rm -f prometheus #编辑配置文件,如下: [root@docker01 ~]# vim prometheus.yml #重启挂载配置文件后的prometheus服务 docker run -d -p 9090:9090 -v /opt/metrics/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml --name prometheus --net=host prom/prometheus #执行上述命令,运行新的prometheus容器,并将刚刚修改的主配置文件挂载到容器中的指定位置 #以后若要修改主配置文件,则直接修改本地的即可。 #挂载主配置文件后,本地的和容器内的相当于同一份,在本地修改内容的话,会同步到容器中 #浏览器访问地址,点击STATUS->Targets:查看监控的服务列表为UP则正常 http://192.168.62.130:9090/graph #prometheus自身监控信息 http://192.168.62.130:9090/metrics
global: # 默认情况下,每15s拉取一次目标采样点数据。 scrape_interval: 15s # 我们可以附加一些指定标签到采样点度量标签列表中, 用于和第三方系统进行通信, 包括:federation, remote storage, Alertmanager external_labels: # 下面就是拉取自身服务采样点数据配置 monitor: 'codelab-monitor' scrape_configs: # job名称会增加到拉取到的所有采样点上,同时还有一个instance目标服务的host:port标签也会增加到采样点上 - job_name: prometheus # 覆盖global的采样点,拉取时间间隔5s scrape_interval: 5s static_configs: - targets: ['localhost:9090','192.168.62.130:9090'] - job_name: node_exporter static_configs: - targets: ['localhost:9100','192.168.62.130:9100'] labels: instance: localhost - job_name: metrics-demo # 覆盖global的采样点,拉取时间间隔5s scrape_interval: 5s metrics_path: '/actuator/prometheus' static_configs: - targets: ['172.17.12.91:8080']
docker restart prometheus #当查询初显时间警告: https://blog.csdn.net/eastyell/article/details/112232691
-
运行 NodeExporter 客户端数据源
node_exporter设计用于监控主机系统。不建议将其部署为Docker容器,因为它需要访问主机系统。请注意,您要监视的任何非根安装点都需要绑定到容器中。如果启动容器以进行主机监视,请指定
path.rootfs
参数。此参数必须与host root的bind-mount中的路径匹配。node_exporter将path.rootfs
用作访问主机文件系统的前缀docker run -d -p 9100:9100 --name node_exporter \ --restart=always \ -v "/proc:/host/proc:ro" \ -v "/sys:/host/sys:ro" \ -v "/:/rootfs:ro" \ prom/node-exporter \ --path.procfs=/host/proc \ --path.rootfs=/rootfs \ --path.sysfs=/host/sys \ --collector.filesystem.ignored-mount-points='^/(sys|proc|dev|host|etc)($$|/)' # 把node_exporter 加入prometheus 任务 -job_name (在上面的prometheus.yml配置文件里配置) # 重启 docker restart prometheus # 浏览器访问 http://192.168.62.130:9100/metrics
-
Grafana可视化
只需要在 Grafana 上配置一个 Prometheus 的数据源。接着我们就可以配置各种图表,Grafana 就会自动去 Prometheus 拉取数据进行展示
# 创建目录 mkdir /opt/metrics/grafana-storage chmod 777 -R /opt/metrics/grafana-storage # 启动 docker run -d \ -p 3000:3000 \ --name=grafana \ --restart=always \ -v /opt/metrics/grafana-storage:/var/lib/grafana \ -e "GF_SECURITY_ADMIN_PASSWORD=admin123" \ grafana/grafana #上述命令中的“-e”选项是为了设置默认的登录用户admin,密码为“admin123”。 #如果启动容器的过程中,提示iptables等相关的错误信息, #则需要执行命令systemctl restart docker,重启docker服务,然后重新运行容器 #但是需要注意,若运行容器时没有增加“--restart=always”选项的话, #那么在重启docker服务后,还需将所有容器手动重启。 #重启所有容器命令“docker ps -a -q | xargs docker start” #浏览器访问登录 http://192.168.62.130:3000/login #配置数据源,配置图标,指标,面板信息 https://www.cnblogs.com/chanshuyi/p/02_grafana_quick_start.html # 官网寻找模板导入 https://grafana.com/
eg : 监控MySQL服务
# 拉取MySQL docker pull prom/mysqld-exporter # docker启动MySQL docker run -d -p 9104:9104 -v /opt/software/mysql:/var/lib/mysql --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql # docker run -d -p 9104:9104 -e DATA_SOURCE_NAME="root:123456@(192.168.62.130:3306)/" -v /opt/software/mysql:/var/lib/mysql --name mysql prom/mysqld-exporter #外网访问 docker exec -it 容器ID bash >mysql -uroot -p >输入密码 # 权限 mysql> use mysql; 然后执行下面的命令: mysql> update user set password_expired = "Y"where user="root"; mysql> ALTER USER'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; mysql> FLUSH PRIVILEGES;
以上执行完成后,在linux的宿主(windows)上用mysqlbench进行连接
MySQL服务加入prometheus服务监控
- job_name: mysql
scrape_interval: 5s
static_configs:
- targets: ['192.168.62.130:9104']
labels:
instance: mysql
设置Prometheus告警
Prometheus的告警方式有好几种方式,邮箱、钉钉、微信等,我这里选择邮箱的告警方式
mkdir /opt/metrics/alertmanager
cd /opt/metrics/alertmanager
# 运行预警服务,运行简单容器
docker run --name alertmanager -d -p 9093:9093 prom/alertmanager
# 拷贝预警配置文件,# 将容器中的配置文件复制到本地
docker cp alertmanager:/etc/alertmanager/alertmanager.yml /opt/metrics/alertmanager/
#容器拷贝后,删除容器
docker rm -f alertmanager
#编辑配置文件
vim alertmanager.yml
#运行新的alertmanager容器,并挂载更改后的配置文件
docker run -d --name alertmanger -p 9093:9093 -v /opt/metrics/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml --restart=always prom/alertmanager
#如果配置文件有错误,那么这个容器是运行不了的。
#配置文件中可以分为以下几组:
#global:全局配置。设置报警策略,报警渠道等;
#route:分发策略;
#receivers:接收者,指定谁来接收你发送的这些信息;
#inhibit_rules:抑制策略。当存在于另一组匹配的警报,抑制规则将禁用于一组匹配的警报
#将以下所有的邮箱账号及auth_password更改为自己的账户即可
global:
resolve_timeout: 5m
smtp_from: '465722177@qq.com'
smtp_smarthost: 'smtp.qq.com:465'
smtp_auth_username: '465722177@qq.com'
smtp_auth_password: 'xxxxx'
smtp_require_tls: false
smtp_hello: 'qq.com'
route:
group_by: ['alertname']
group_wait: 5s
group_interval: 5s
repeat_interval: 5m
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: '465722177@qq.com'
send_resolved: true # 这行的作用是,当容器恢复正常后,也会发送一份邮件
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
设置alertmanager报警规则
mkdir -p /opt/metrics/alertmanager/rules
cd /opt/metrics/alertmanager/rules
# 编辑报警规则配置文件
vim node-up.rules
groups:
- name: node-up #设置报警的名称
rules:
- alert: node-up
expr: up{job="prometheus"} == 0 #该job必须和Prometheus的配置文件中job_name完全一致
for: 15s
labels:
severity: 1 #一级警告
team: node
annotations:
summary: "{{ $labels.instance }} 已停止运行超过 15s!"
关联到Prometheus
cd /opt/metrics/prometheus
#编辑prometheus配置文件,添加报警规则
vi prometheus.yml
alerting:
alertmanagers:
- static_configs:
- targets:
- 192.168.62.130:9093 # 改为alertmanager容器的IP+端口
rule_files:
- "/opt/metrics/alertmanager/rules/*.rules"
#必须格外注意配置文件的格式,注意缩进
#重启prometheus,上面的命令进行重启
docker rm -f prometheus
#重启挂载配置文件后的prometheus服务
docker run -d -p 9090:9090 -v /opt/metrics/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml --name prometheus --net=host prom/prometheus
# 如果prometheus上的某一个target为down,则会通过邮件发送预警信息.
设置报警信息模板
cd /opt/metrics/alertmanager
mkdir alertmanager-tmpl
cd alertmanager-tmpl/
#编辑模板信息
vim email.tmpl
{{ define "email.from" }}465722177@qq.com{{ end }} # 将此改为自己的邮箱
{{ define "email.to" }}465722177@qq.com{{ end }} # 将此改为自己的邮箱
{{ define "email.to.html" }}
{{ range .Alerts }}
=========start==========<br>
告警程序: prometheus_alert<br>
告警级别: {{ .Labels.severity }} 级<br>
告警类型: {{ .Labels.alertname }}<br>
故障主机: {{ .Labels.instance }}<br>
告警主题: {{ .Annotations.summary }}<br>
触发时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }} <br>
=========end==========<br>
{{ end }}
{{ end }}
cd /opt/metrics/alertmanager
#编辑预警配置文件,添加模板信息
vim alertmanager.yml
#添加注释部分,其他不变
global:
resolve_timeout: 5m
smtp_from: '465722177@qq.com'
smtp_smarthost: 'smtp.qq.com:465'
smtp_auth_username: '465722177@qq.com'
smtp_auth_password: 'xxxxxx'
smtp_require_tls: false
smtp_hello: 'qq.com'
route:
group_by: ['alertname']
templates: # 添加此行
- '/opt/metrics/alertmanager/alertmanager-tmpl/*.tmpl' # 添加此行
prometheus 学习文档
添加注释部分,其他不变
global:
resolve_timeout: 5m
smtp_from: ‘465722177@qq.com’
smtp_smarthost: ‘smtp.qq.com:465’
smtp_auth_username: ‘465722177@qq.com’
smtp_auth_password: ‘xxxxx’
smtp_require_tls: false
smtp_hello: ‘qq.com’
route:
group_by: [‘alertname’]
templates: # 添加此行
- ‘/opt/metrics/alertmanager/alertmanager-tmpl/*.tmpl’ # 添加此行
> prometheus 学习文档
https://github.com/1046102779/prometheus