Prometheus部署监控报警

在容器环境中配置安装Prometheus+部署企业微信容器报警+Grafana展示

下载Prometheus (监控Server端)

[root@Prometheus-Grafana prometheus]# mkdir /prometheus
[root@Prometheus-Grafana prometheus]# docker run -d --name test -P prom/prometheus
[root@Prometheus-Grafana prometheus]# docker cp test:/etc/prometheus/prometheus.yml /prometheus[root@Prometheus-Grafana prometheus]# docker rm -f test
[root@Prometheus-Grafana prometheus]# docker run -d --name prometheus --net host -p 9090:9090 -v /prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus[root@Prometheus-Grafana prometheus]# pwd
/prometheus
[root@Prometheus-Grafana prometheus]# vim prometheus.yml

修改后重启Prometheus
[root@Prometheus-Grafana prometheus]# docker restart prometheus
访问 IP+9090

下载node-exporter(抽取硬件信息)

// 全部主机都要做
docker run -d -p 9100:9100 -v /proc:/host/proc -v /sys:/host/sys -v /:/rootfs --net=host prom/node-exporter --path.procfs /host/proc --path.sysfs /host/sys --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"--web.listen-address 9100  //默认使用9100端口号
--path.rootfs:node-exporter使用/host前缀访问主机文件系统
--collector.filesystem.ignored-mount-points:忽略访问的文件
--net=host:代替端口映射,如容器有80,需要访问的话就需要加-p选项,不想的话加--net=host就可以直接访问80
启动后去修改Prometheus.yml配置文件!

在这里插入图片描述

#重启Prometheus
docker restart prometheus
#每次动完Prometheus.yml这个文件,必须重启才能生效,因为这是普罗米的配置文件!

下载cadvisor(抽取容器信息)

docker run \
--volume=/:/roofs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest

注:如果发现启动不起来 docker ps查看没有的话跟着下文解决报错

发现没有启动起来
在这里插入图片描述

#如果是这样的话
[root@localhost ~]# mount -o remount,rw '/sys/fs/cgroup'
[root@localhost ~]# ln -s /sys/fs/cgroup/cpu,cpuacct /sys/fs/cgroup/cpuacct,cpu
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
5f16fb0b2a91        google/cadvisor     "/usr/bin/cadvisor..."   29 minutes ago      Exited (255) 32 seconds ago                       cadvisor
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@localhost ~]# docker start 5f1
5f1
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                  PORTS               NAMES
5f16fb0b2a91        google/cadvisor     "/usr/bin/cadvisor..."   29 minutes ago      Up Less than a second                       cadvisor#执行前两行命令#该报错的错误原因是:系统资源只读!
#启动后去访问IP+8080端口查看cADvisor

在这里插入图片描述
在这里插入图片描述

下载Grafana(展示监控)

mkdir /grafana
chmod 777 -R /grafana
docker run -d -p 3000:3000 --name grafana -v /grafana:/var/lib/grafana -e "GF_SECURITY_ADMIN_PASSWORD=123.com" grafana/grafana

在这里插入图片描述
/ / 添加数据源
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注:这里比较容易犯错,不要去填8080和9100,必须去填9090!!跟着我操作就可以了!!
这里直接套用grafana的模板
https://grafana.com/grafana/dashboards/11074-node-exporter-for-prometheus-dashboard-en-v20201010/

#有两种方式使用模板
1 通过模板的id号进行导入
2将模板下载到本地再进行导入
#这里推荐直接输入ID号

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这是最终展示的监控硬件画面

因为我们要看的是容器的信息,所以找一个和容器相关的模板导入。

通过关键字搜索相关模板
https://grafana.com/grafana/dashboards/10619-docker-host-container-overview/
操作和上面导入模板操作一样,也是导入刚刚配置的数据源在这里插入图片描述

这是最终展示的页面

在这里插入图片描述
在这里也可以去选择节点

做完以上监控以及展示我们的步骤已经进行了一半了,接下来就是去配置监控报警项

下载Alertmanager(报警)

[root@prometheus ~]# mkdir /alertmanager  //创建一个数据目录
[root@prometheus ~]# docker run -d --name test -p 9093:9093 prom/alertmanager  
#创建容器用来获得alertmanager.yml配置文件[root@prometheus ~]# docker cp test:/etc/alertmanager/alertmanager.yml /alertmanager/[root@prometheus ~]# docker rm -f test[root@prometheus ~]# docker run -d --name alertmanager -p 9093:9093 -v /alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml -v /alertmanager/template/:/etc/alertmanager/template prom/alertmanager
#这里说一下配置文件中几个重要的参数global:全局配置,包括报警解决后的超时时间、SMTP相关配置、各种渠道通知的API地址等route:用来设置报警的分发策略,它是一个树状结构,按照深度优先从左向右的顺序进行匹配。receivers:配置告警消息接受者信息,例如常用的email、wechat、slack、webhook等消息通知方式inhibit_rules:抑制规则配置,当存在与另一组匹配的警报()时,抑制规则将禁用与一组匹配的报警(目标)
配置Prometheus部分

在这里插入图片描述

[root@Prometheus-Grafana prometheus]# mkdir /prometheus/rules
[root@Prometheus-Grafana rules]# vim blackbox-alert.rules 
[root@Prometheus-Grafana rules]# pwd
/prometheus/rulesgroups:- name: blackbox-alertrules:- alert: 端口状态expr: probe_success == 0for: 10slabels:severity: 'warning'annotations:description: 'API service: {{$labels.instance}} 端口检查失败,服务不可用,请检查'summary: 'API service: {{$labels.instance}} '#注,这是第一个报警规则配置,下面还有两个都要创建!这个规则一会容器报警会用,先提前创建了。
[root@Prometheus-Grafana rules]# vim node-exporter-record.rules
groups:- name: node-exporter-recordrules:- expr: up{job="node-exporter"}record: node_exporter:uplabels:desc: "节点是否在线, 在线1,不在线0"unit: " "job: "node-exporter"- expr: time() - node_boot_time_seconds{}record: node_exporter:node_uptimelabels:desc: "节点的运行时间"unit: "s"job: "node-exporter"
##############################################################################################
#                              cpu                                                           #- expr: (1 - avg by (environment,instance) (irate(node_cpu_seconds_total{job="node-exporter",mode="idle"}[5m])))  * 100record: node_exporter:cpu:total:percentlabels:desc: "节点的cpu总消耗百分比"unit: "%"job: "node-exporter"- expr: (avg by (environment,instance) (irate(node_cpu_seconds_total{job="node-exporter",mode="idle"}[5m])))  * 100record: node_exporter:cpu:idle:percentlabels:desc: "节点的cpu idle百分比"unit: "%"job: "node-exporter"- expr: (avg by (environment,instance) (irate(node_cpu_seconds_total{job="node-exporter",mode="iowait"}[5m])))  * 100record: node_exporter:cpu:iowait:percentlabels:desc: "节点的cpu iowait百分比"unit: "%"job: "node-exporter"- expr: (avg by (environment,instance) (irate(node_cpu_seconds_total{job="node-exporter",mode="system"}[5m])))  * 100record: node_exporter:cpu:system:percentlabels:desc: "节点的cpu system百分比"unit: "%"job: "node-exporter"- expr: (avg by (environment,instance) (irate(node_cpu_seconds_total{job="node-exporter",mode="user"}[5m])))  * 100record: node_exporter:cpu:user:percentlabels:desc: "节点的cpu user百分比"unit: "%"job: "node-exporter"- expr: (avg by (environment,instance) (irate(node_cpu_seconds_total{job="node-exporter",mode=~"softirq|nice|irq|steal"}[5m])))  * 100record: node_exporter:cpu:other:percentlabels:desc: "节点的cpu 其他的百分比"unit: "%"job: "node-exporter"
############################################################################################################################################################################################
#                                    memory                                                  #- expr: node_memory_MemTotal_bytes{job="node-exporter"}record: node_exporter:memory:totallabels:desc: "节点的内存总量"unit: bytejob: "node-exporter"- expr: node_memory_MemFree_bytes{job="node-exporter"}record: node_exporter:memory:freelabels:desc: "节点的剩余内存量"unit: bytejob: "node-exporter"- expr: node_memory_MemTotal_bytes{job="node-exporter"} - node_memory_MemFree_bytes{job="node-exporter"}record: node_exporter:memory:usedlabels:desc: "节点的已使用内存量"unit: bytejob: "node-exporter"- expr: node_memory_MemTotal_bytes{job="node-exporter"} - node_memory_MemAvailable_bytes{job="node-exporter"}record: node_exporter:memory:actualusedlabels:desc: "节点用户实际使用的内存量"unit: bytejob: "node-exporter"- expr: (1-(node_memory_MemAvailable_bytes{job="node-exporter"} / (node_memory_MemTotal_bytes{job="node-exporter"})))* 100record: node_exporter:memory:used:percentlabels:desc: "节点的内存使用百分比"unit: "%"job: "node-exporter"- expr: ((node_memory_MemAvailable_bytes{job="node-exporter"} / (node_memory_MemTotal_bytes{job="node-exporter"})))* 100record: node_exporter:memory:free:percentlabels:desc: "节点的内存剩余百分比"unit: "%"job: "node-exporter"
##############################################################################################
#                                   load                                                     #- expr: sum by (instance) (node_load1{job="node-exporter"})record: node_exporter:load:load1labels:desc: "系统1分钟负载"unit: " "job: "node-exporter"- expr: sum by (instance) (node_load5{job="node-exporter"})record: node_exporter:load:load5labels:desc: "系统5分钟负载"unit: " "job: "node-exporter"- expr: sum by (instance) (node_load15{job="node-exporter"})record: node_exporter:load:load15labels:desc: "系统15分钟负载"unit: " "job: "node-exporter"##############################################################################################
#                                 disk                                                       #- expr: node_filesystem_size_bytes{job="node-exporter" ,fstype=~"ext4|xfs"}record: node_exporter:disk:usage:totallabels:desc: "节点的磁盘总量"unit: bytejob: "node-exporter"- expr: node_filesystem_avail_bytes{job="node-exporter",fstype=~"ext4|xfs"}record: node_exporter:disk:usage:freelabels:desc: "节点的磁盘剩余空间"unit: bytejob: "node-exporter"- expr: node_filesystem_size_bytes{job="node-exporter",fstype=~"ext4|xfs"} - node_filesystem_avail_bytes{job="node-exporter",fstype=~"ext4|xfs"}record: node_exporter:disk:usage:usedlabels:desc: "节点的磁盘使用的空间"unit: bytejob: "node-exporter"- expr:  (1 - node_filesystem_avail_bytes{job="node-exporter",fstype=~"ext4|xfs"} / node_filesystem_size_bytes{job="node-exporter",fstype=~"ext4|xfs"}) * 100record: node_exporter:disk:used:percentlabels:desc: "节点的磁盘的使用百分比"unit: "%"job: "node-exporter"- expr: irate(node_disk_reads_completed_total{job="node-exporter"}[1m])record: node_exporter:disk:read:count:ratelabels:desc: "节点的磁盘读取速率"unit: "次/秒"job: "node-exporter"- expr: irate(node_disk_writes_completed_total{job="node-exporter"}[1m])record: node_exporter:disk:write:count:ratelabels:desc: "节点的磁盘写入速率"unit: "次/秒"job: "node-exporter"- expr: (irate(node_disk_written_bytes_total{job="node-exporter"}[1m]))/1024/1024record: node_exporter:disk:read:mb:ratelabels:desc: "节点的设备读取MB速率"unit: "MB/s"job: "node-exporter"- expr: (irate(node_disk_read_bytes_total{job="node-exporter"}[1m]))/1024/1024record: node_exporter:disk:write:mb:ratelabels:desc: "节点的设备写入MB速率"unit: "MB/s"job: "node-exporter"##############################################################################################
#                                filesystem                                                  #- expr:   (1 -node_filesystem_files_free{job="node-exporter",fstype=~"ext4|xfs"} / node_filesystem_files{job="node-exporter",fstype=~"ext4|xfs"}) * 100record: node_exporter:filesystem:used:percentlabels:desc: "节点的inode的剩余可用的百分比"unit: "%"job: "node-exporter"
#############################################################################################
#                                filefd                                                     #- expr: node_filefd_allocated{job="node-exporter"}record: node_exporter:filefd_allocated:countlabels:desc: "节点的文件描述符打开个数"unit: "%"job: "node-exporter"- expr: node_filefd_allocated{job="node-exporter"}/node_filefd_maximum{job="node-exporter"} * 100record: node_exporter:filefd_allocated:percentlabels:desc: "节点的文件描述符打开百分比"unit: "%"job: "node-exporter"#############################################################################################
#                                network                                                    #- expr: avg by (environment,instance,device) (irate(node_network_receive_bytes_total{device=~"eth0|eth1|ens33|ens37"}[1m]))record: node_exporter:network:netin:bit:ratelabels:desc: "节点网卡eth0每秒接收的比特数"unit: "bit/s"job: "node-exporter"- expr: avg by (environment,instance,device) (irate(node_network_transmit_bytes_total{device=~"eth0|eth1|ens33|ens37"}[1m]))record: node_exporter:network:netout:bit:ratelabels:desc: "节点网卡eth0每秒发送的比特数"unit: "bit/s"job: "node-exporter"- expr: avg by (environment,instance,device) (irate(node_network_receive_packets_total{device=~"eth0|eth1|ens33|ens37"}[1m]))record: node_exporter:network:netin:packet:ratelabels:desc: "节点网卡每秒接收的数据包个数"unit: "个/秒"job: "node-exporter"- expr: avg by (environment,instance,device) (irate(node_network_transmit_packets_total{device=~"eth0|eth1|ens33|ens37"}[1m]))record: node_exporter:network:netout:packet:ratelabels:desc: "节点网卡发送的数据包个数"unit: "个/秒"job: "node-exporter"- expr: avg by (environment,instance,device) (irate(node_network_receive_errs_total{device=~"eth0|eth1|ens33|ens37"}[1m]))record: node_exporter:network:netin:error:ratelabels:desc: "节点设备驱动器检测到的接收错误包的数量"unit: "个/秒"job: "node-exporter"- expr: avg by (environment,instance,device) (irate(node_network_transmit_errs_total{device=~"eth0|eth1|ens33|ens37"}[1m]))record: node_exporter:network:netout:error:ratelabels:desc: "节点设备驱动器检测到的发送错误包的数量"unit: "个/秒"job: "node-exporter"- expr: node_tcp_connection_states{job="node-exporter", state="established"}record: node_exporter:network:tcp:established:countlabels:desc: "节点当前established的个数"unit: "个"job: "node-exporter"- expr: node_tcp_connection_states{job="node-exporter", state="time_wait"}record: node_exporter:network:tcp:timewait:countlabels:desc: "节点timewait的连接数"unit: "个"job: "node-exporter"- expr: sum by (environment,instance) (node_tcp_connection_states{job="node-exporter"})record: node_exporter:network:tcp:total:countlabels:desc: "节点tcp连接总数"unit: "个"job: "node-exporter"#############################################################################################
#                                process                                                    #- expr: node_processes_state{state="Z"}record: node_exporter:process:zoom:total:countlabels:desc: "节点当前状态为zoom的个数"unit: "个"job: "node-exporter"
#############################################################################################
#                                other                                                    #- expr: abs(node_timex_offset_seconds{job="node-exporter"})record: node_exporter:time:offsetlabels:desc: "节点的时间偏差"unit: "s"job: "node-exporter"#############################################################################################- expr: count by (instance) ( count by (instance,cpu) (node_cpu_seconds_total{ mode='system'}) )record: node_exporter:cpu:count
[root@Prometheus-Grafana rules]# vim node-exporer-alert.rules 
groups:- name: node-exporter-alertrules:- alert: node-exporter-downexpr: node_exporter:up == 0for: 1mlabels:severity: 'critical'annotations:summary: "instance: {{ $labels.instance }} 宕机了"description: "instance: {{ $labels.instance }} \n- job: {{ $labels.job }} 关机了, 时间已经1分钟了。"value: "{{ $value }}"instance: "{{ $labels.instance }}"- alert: node-exporter-cpu-highexpr:  node_exporter:cpu:total:percent > 80for: 3mlabels:severity: infoannotations:summary: "instance: {{ $labels.instance }} cpu 使用率高于 {{ $value }}"description: "instance: {{ $labels.instance }} \n- job: {{ $labels.job }} CPU使用率已经持续三分钟高过80% 。"value: "{{ $value }}"instance: "{{ $labels.instance }}"- alert: node-exporter-cpu-iowait-highexpr:  node_exporter:cpu:iowait:percent >= 12for: 3mlabels:severity: infoannotations:summary: "instance: {{ $labels.instance }} cpu iowait 使用率高于 {{ $value }}"description: "instance: {{ $labels.instance }} \n- job: {{ $labels.job }} cpu iowait使用率已经持续三分钟高过12%"value: "{{ $value }}"instance: "{{ $labels.instance }}"- alert: node-exporter-load-load1-highexpr:  (node_exporter:load:load1) > (node_exporter:cpu:count) * 1.2for: 3mlabels:severity: infoannotations:summary: "instance: {{ $labels.instance }} load1 使用率高于 {{ $value }}"description: ""value: "{{ $value }}"instance: "{{ $labels.instance }}"- alert: node-exporter-memory-highexpr:  node_exporter:memory:used:percent > 85for: 3mlabels:severity: infoannotations:summary: "instance: {{ $labels.instance }} memory 使用率高于 {{ $value }}"description: ""value: "{{ $value }}"instance: "{{ $labels.instance }}"- alert: node-exporter-disk-highexpr:  node_exporter:disk:used:percent > 88for: 10mlabels:severity: infoannotations:summary: "instance: {{ $labels.instance }} disk 使用率高于 {{ $value }}"description: ""value: "{{ $value }}"instance: "{{ $labels.instance }}"- alert: node-exporter-disk-read:count-highexpr:  node_exporter:disk:read:count:rate > 3000for: 2mlabels:severity: infoannotations:summary: "instance: {{ $labels.instance }} iops read 使用率高于 {{ $value }}"description: ""value: "{{ $value }}"instance: "{{ $labels.instance }}"- alert: node-exporter-disk-write-count-highexpr:  node_exporter:disk:write:count:rate > 3000for: 2mlabels:severity: infoannotations:summary: "instance: {{ $labels.instance }} iops write 使用率高于 {{ $value }}"description: ""value: "{{ $value }}"instance: "{{ $labels.instance }}"- alert: node-exporter-disk-read-mb-highexpr:  node_exporter:disk:read:mb:rate > 60for: 2mlabels:severity: infoannotations:summary: "instance: {{ $labels.instance }} 读取字节数 高于 {{ $value }}"description: ""instance: "{{ $labels.instance }}"value: "{{ $value }}"- alert: node-exporter-disk-write-mb-highexpr:  node_exporter:disk:write:mb:rate > 60for: 2mlabels:severity: infoannotations:summary: "instance: {{ $labels.instance }} 写入字节数 高于 {{ $value }}"description: ""value: "{{ $value }}"instance: "{{ $labels.instance }}"- alert: node-exporter-filefd-allocated-percent-highexpr:  node_exporter:filefd_allocated:percent > 80for: 10mlabels:severity: infoannotations:summary: "instance: {{ $labels.instance }} 打开文件描述符 高于 {{ $value }}"description: ""value: "{{ $value }}"instance: "{{ $labels.instance }}"- alert: node-exporter-network-netin-error-rate-highexpr:  node_exporter:network:netin:error:rate > 4for: 1mlabels:severity: infoannotations:summary: "instance: {{ $labels.instance }} 包进入的错误速率 高于 {{ $value }}"description: ""value: "{{ $value }}"instance: "{{ $labels.instance }}"- alert: node-exporter-network-netin-packet-rate-highexpr:  node_exporter:network:netin:packet:rate > 35000for: 1mlabels:severity: infoannotations:summary: "instance: {{ $labels.instance }} 包进入速率 高于 {{ $value }}"description: ""value: "{{ $value }}"instance: "{{ $labels.instance }}"- alert: node-exporter-network-netout-packet-rate-highexpr:  node_exporter:network:netout:packet:rate > 35000for: 1mlabels:severity: infoannotations:summary: "instance: {{ $labels.instance }} 包流出速率 高于 {{ $value }}"description: ""value: "{{ $value }}"instance: "{{ $labels.instance }}"- alert: node-exporter-network-tcp-total-count-highexpr:  node_exporter:network:tcp:total:count > 40000for: 1mlabels:severity: infoannotations:summary: "instance: {{ $labels.instance }} tcp连接数量 高于 {{ $value }}"description: ""value: "{{ $value }}"instance: "{{ $labels.instance }}"- alert: node-exporter-process-zoom-total-count-highexpr:  node_exporter:process:zoom:total:count > 10for: 10mlabels:severity: infoannotations:summary: "instance: {{ $labels.instance }} 僵死进程数量 高于 {{ $value }}"description: ""value: "{{ $value }}"instance: "{{ $labels.instance }}"- alert: node-exporter-time-offset-highexpr:  node_exporter:time:offset > 0.03for: 2mlabels:severity: infoannotations:summary: "instance: {{ $labels.instance }} {{ $labels.desc }}  {{ $value }} {{ $labels.unit }}"description: ""value: "{{ $value }}"instance: "{{ $labels.instance }}"

以上规则配好后我们的报警触发器已经做好了现在需要去做报警收件人了,因为现在企业微信直接用Alertmanager发送会非常麻烦,要涉及到可信IP,那个地方兄弟们会被卡很久的,所以直接用企业微信可信的转发器转发报警信息给企业微信就可以了!

下载PrometheusAlert(转发器)

[root@JenkinsGitlab linux]# wget https://github.com/feiyu563/PrometheusAlert/releases/download/v4.8.1/linux.zip[root@JenkinsGitlab linux]# unzip linux.zip[root@JenkinsGitlab linux]# cd linux/[root@JenkinsGitlab linux]# vim conf/app.conf#这个我们直接部署在外面,不用在容器中,在容器中部署是非常麻烦的

在这里插入图片描述
在这里插入图片描述
这个机器人地址在企业微信群聊中去添加
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
把这个复制下来填到刚刚的配置文件中

[root@JenkinsGitlab linux]# chmod +x PrometheusAlert[root@JenkinsGitlab linux]# 启动 nohup ./PrometheusAlert & 后台运行[root@JenkinsGitlab linux]# 停止 ps -ef |grep PrometheusAlert 关闭 kill -9 进程号#访问IP地址:刚刚更改的端口号 比如我是9555那直接访问9555

在这里插入图片描述

部署好了PrometheusAler之后更改Alertmanager的配置,将所有告警信息都转发到PrometheusAlert
[root@JenkinsGitlab linux]# vim /usr/local/alertmanager/alertmanager.yml
global:resolve_timeout: 5m
route:group_by: ['instance']group_wait: 10sgroup_interval: 10srepeat_interval: 1mreceiver: 'web.hook.prometheusalert'
receivers:
- name: 'web.hook.prometheusalert'webhook_configs:- url: '根据下图填写!!!!!!!!!!!!!!!!!'

在这里插入图片描述

#重启alertmanager
[root@JenkinsGitlab linux]# docker restart alertmanager

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击测试后去企业微信群查看测试信息(这条测试信息是秒发送,但是正常的报警会有2分钟左右的延迟)
在这里插入图片描述
去到Alert页面点击模板管理后点击企业微信

在这里插入图片描述
在这里插入图片描述

{{ $var := .externalURL}}{{ range $k,$v:=.alerts }}{{if eq $v.status "resolved"}}[PROMETHEUS-恢复信息]({{$v.generatorURL}})
> **[{{$v.labels.alertname}}]({{$var}})**
> <font color="info">告警级别:</font> {{$v.labels.severity}}
> <font color="info">开始时间:</font> {{GetCSTtime $v.startsAt}}
> <font color="info">结束时间:</font> {{GetCSTtime $v.endsAt}}
> <font color="info">故障主机IP:</font> {{$v.labels.instance}}
> <font color="info">**{{$v.annotations.description}}**</font>{{else}}[PROMETHEUS-告警信息]({{$v.generatorURL}})
> **[{{$v.labels.alertname}}]({{$var}})**
> <font color="warning">告警级别:</font> {{$v.labels.severity}}
> <font color="warning">开始时间:</font> {{GetCSTtime $v.startsAt}}
> <font color="warning">结束时间:</font> {{GetCSTtime $v.endsAt}}
> <font color="warning">故障主机IP:</font> {{$v.labels.instance}}
> <font color="warning">**{{$v.annotations.description}}**</font>{{end}}{{ end }}
{{ $urimsg:=""}}{{ range $key,$value:=.commonLabels }}{{$urimsg =  print $urimsg $key "%3D%22" $value "%22%2C" }}{{end}}[*** 点我屏蔽该告警]({{$var}}/#/silences/new?filter=%7B{{SplitString $urimsg 0 -3}}%7D)

在这里插入图片描述

配置完报警规则后重启Prometheus
[root@JenkinsGitlab prometheus]# dcoker restart prometheus
重启后去到node节点
[root@node1 ~]# docker stop node_exporter

关闭服务后等待1-2分钟这边报警信息就会来了在这里插入图片描述

再尝试一下恢复
[root@node1 ~]# docker start node_exporter
开启服务后等待1-2分钟这边报警信息就会来了

在这里插入图片描述
但是呢,这会的报警只能去监控到9100端口就是node组件,我们还需要去配置容器的报警
下载Blackbox_exporter
blackbox_exporter是Prometheus官方提供的exporter之一,可以提供HTTP、HTTPS、DNS、TCP以及ICMP的方式对网络进行探测。
下载地址:https://github.com/prometheus/blackbox_exporter/releases/tag/v0.19.0
在这里插入图片描述

点击下载
[root@Prometheus-Grafana ~]# tar xf blackbox_exporter-0.22.0.linux-amd64.tar.gz[root@Prometheus-Grafana ~]# mv blackbox_exporter-0.22.0.linux-amd64 /usr/local/blackbox_exporter[root@Prometheus-Grafana linux]# vim /usr/lib/systemd/system/blackbox_exporter.service
[Unit]Description=Blackbox ExporterWants=network-online.targetAfter=network-online.target[Service]User=rootExecStart=/usr/local/blackbox_exporter/blackbox_exporter --config.file=/usr/local/blackbox_exporter/blackbox.ymlRestart=on-failureWantedBy=default.target[root@Prometheus-Grafana linux]# systemctl daemon-reload[root@Prometheus-Grafana linux]# systemctl start blackbox_exporter[root@Prometheus-Grafana linux]# systemctl enable blackbox_exporter
#测试一下,启动一个Nginx
[root@Prometheus-Grafana linux]# docker run -d --name nginx01 -p:3344:80 nginx
启动后去修改Prometheus配置文件
  - job_name: 'port_status'metrics_path: /probeparams:module: [tcp_connect]static_configs:- targets:- 容器宿主机IP:3344relabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__replacement: 黑盒所在主机的IP:9115
写完配置文件重启Prometheus
[root@Prometheus-Grafana linux]# docker stop prometheus
[root@Prometheus-Grafana linux]# docker start prometheu
重启后去访问Prometheus的网页端查看是否监控上

在这里插入图片描述
成功显示后关闭Nginx查看是否有报警信息

[root@Prometheus-Grafana linux]# docker stop nginx01#等收到报警后再开启nginx测试恢复信息[root@Prometheus-Grafana linux]# docker start nginx01

配置完后,我们的Prometheus监控容器并报警就做完了!在这里插入图片描述

配置完后,我们的Prometheus监控容器并报警就做完了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/668428.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据与广告系列三十七:广告,商业化的高雅,中间商赚差价的无奈

作者黄崇远 『数据巢』 全文8872字 题图ssyer.com “ 商业化广告&#xff0c;看着其技术复杂又富有挑战性&#xff0c;业务覆盖行业的方方面面又似乎不可或缺&#xff0c;但究其本质&#xff0c;依然是中间商赚差价的生意而已&#xff0c;但细究其背后的深层原因&#xff0c;却…

深入解析Elasticsearch的内部数据结构和机制:行存储、列存储与倒排索引之行存(一)

在当今的大数据时代&#xff0c;高效的数据检索和分析能力已成为许多应用程序的核心需求。Elasticsearch&#xff0c;作为一款强大的分布式搜索和分析引擎&#xff0c;正是为了满足这些需求而诞生的。它之所以能够在海量数据中实现毫秒级的搜索响应&#xff0c;以及灵活的数据分…

笔记本电脑的WIFI模块,突然不显示了,网络也连接不上

问题复现&#xff1a; 早上&#xff0c;在更新完笔记本电脑的系统之后&#xff0c;连网之后&#xff0c;网络突然直接断开&#xff0c;一查看&#xff0c;WiFi模块居然不见了&#xff0c;开机重启也是如此&#xff0c;这种情况常常出现在更新系统之后&#xff0c;WiFi模块驱动就…

RK3399平台开发系列讲解(内存篇)进程内存详解

🚀返回专栏总目录 文章目录 一、虚拟地址映射的物理内存1.1、物理内存1.2、虚拟内存1.2.1、用户态:低特权运行程序1.2.2、内核态:运行的程序需要访问操作系统内核数据二、PageCache三、指标查询命令沉淀、分享、成长,让自己和他人都能有所收获!😄 📢进程消耗的内存包…

docker proxy 【docker 代理】

第一种 创建代理配置文件 mkdir -p /etc/systemd/system/docker.service.d/ cat <<EOF > /etc/systemd/system/docker.service.d/http-proxy.conf Environment"HTTP_PROXYhttp://192.168.21.101:7890" Environment"HTTPS_PROXYhttp://192.168.21.1…

同城外卖跑腿app开发:重新定义城市生活

随着科技的发展和人们生活节奏的加快&#xff0c;同城外卖跑腿app应运而生&#xff0c;成为现代城市生活中的重要组成部分。本文将探讨同城外卖跑腿app开发的意义、市场需求、功能特点以及未来的发展趋势。 一、同城外卖跑腿app开发的意义 同城外卖跑腿app作为一种便捷的生活…

sqli.labs靶场(41-53关)

41、第四十一关 -1 union select 1,2,3-- -1 union select 1,database(),(select group_concat(table_name) from information_schema.tables where table_schemadatabase()) -- -1 union select 1,2,(select group_concat(column_name) from information_schema.columns wher…

0基础学习VR全景平台篇第141篇:如何制作卫星航拍全景

大家好&#xff0c;欢迎观看蛙色官方系列全景摄影课程&#xff01; 很多人都看过或者拍摄过航拍全景&#xff0c;其效果相比于普通的地拍的确有着更加震撼的拍摄效果&#xff0c;但是受限于无人机高度&#xff0c;以及禁飞区等等限制&#xff0c;导致很多大场景无法展示完全&a…

Linux防火墙与iptables五表五链规则介绍

目录 一、防火墙基本认识 1. 安全技术 2. 防火墙分类 3. 防火墙工具介绍 二、iptables 1. 概述 2. 五表五链 3. 语法 3.1 基本语法 3.2 语法总结 4. 管理选项 5. 通用匹配 6. 控制类型 7. iptables应用 7.1 新增防火墙规则 7.2 查看规则表 7.3 黑白名单 7.4 …

C++ 调用lua 脚本

需求&#xff1a; 使用Qt/C 调用 lua 脚本 扩展原有功能。 步骤&#xff1a; 1&#xff0c;工程中引入 头文件&#xff0c;库文件。lua二进制下载地址&#xff08;Lua Binaries&#xff09; 2&#xff0c; 调用脚本内函数。 这里调用lua 脚本中的process函数&#xff0c;并…

canvas图片上设置镂空文字效果

查看专栏目录 canvas实例应用100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

C语言-3

定义指针 /*指针的概念:1.为了方便访问内存中的内容&#xff0c;给每一个内存单元&#xff0c;进行编号&#xff0c;那么我们称这个编号为地址&#xff0c;也就是指针。2.指针也是一种数据类型&#xff0c;指针变量有自己的内存&#xff0c;里面存储的是地址&#xff0c;也就是…

【HarmonyOS应用开发】APP应用的通知(十五)

相关介绍 通知旨在让用户以合适的方式及时获得有用的新消息&#xff0c;帮助用户高效地处理任务。应用可以通过通知接口发送通知消息&#xff0c;用户可以通过通知栏查看通知内容&#xff0c;也可以点击通知来打开应用&#xff0c;通知主要有以下使用场景&#xff1a; 显示接收…

BUGKU-WEB Simple_SSTI_1

02 Simple_SSTI_1 题目描述 没啥好说的~ 解题思路 进入场景后&#xff0c;显示&#xff1a; You need pass in a parameter named flag。ctrlu 查看源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><titl…

代码随想录 Leetcode491. 非递减子序列

题目&#xff1a; 代码(首刷看解析 2024年2月3日&#xff09;&#xff1a; class Solution { private:vector<vector<int>> res;vector<int> path; public:void backtracking(vector<int>& nums, int startIndex) {if (path.size() > 1) {res.…

HSM加密机原理:密钥管理和加密操作从软件层面转移到物理设备中 DUKPT 安全行业基础8

HSM加密机原理 硬件安全模块&#xff08;HSM&#xff09;是一种物理设备&#xff0c;设计用于安全地管理、处理和存储加密密钥和数字证书。HSM广泛应用于需要高安全性的场景&#xff0c;如金融服务、数据保护、企业安全以及政府和军事领域。HSM提供了一种比软件存储密钥更安全…

Web html和css

目录 1 前言2 HTML2.1 元素(Element)2.1.1 块级元素和内联(行级)元素2.1.2 空元素 2.2 html页面的文档结构2.3 常见标签使用2.3.1 注释2.3.2 标题2.3.3 段落2.3.4 列表2.3.5 超链接2.3.6 图片2.3.7 内联(行级)标签2.3.8 换行 2.4 属性2.4.1 布尔属性 2.5 实体引用2.6 空格2.7 D…

vue3 之 组合式API—生命周期函数

vue3的生命周期API 生命周期函数基本使用 1️⃣导入生命周期函数 2️⃣执行生命周期函数 传入回调 <scirpt setup> import { onMounted } from vue onMounted(()>{// 组件挂载完毕mounted执行了 }) </script>执行多次 生命周期函数是可以执行多次的&#xff…

支持多字体、静动态的.NET图片验证码的开源项目

上次分享过 SkiaSharp 这个开源图形项目&#xff0c;并举了一个生成验证码的例子&#xff0c;具体见文章&#xff1a;《SkiaSharp&#xff1a;.NET强大而灵活的跨平台图形库》。 但文中验证码比较简单&#xff0c;刚好看到一个非常不错的图片验证码&#xff0c;分享给大家。 …

ChatGPT之搭建API代理服务

简介 一行Docker命令部署的 OpenAI/GPT API代理&#xff0c;支持SSE流式返回、腾讯云函数 。 项目地址&#xff1a;https://github.com/easychen/openai-api-proxy 这个项目可以自行搭建 OpenAI API 代理服务器工具&#xff0c;该项目是代理的服务器端&#xff0c;不是客户端。…