远见而明察近观若明火|Centos7.6环境基于Prometheus和Grafana结合钉钉机器人打造全时监控(预警)Docker容器服务系统

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 我们知道,奉行长期主义的网络公司,势必应在软件开发流程管理体系上具备规范意识,即代码提交有CR(CodeReview),功能测试上自动化,而功能发布讲究三板斧:灰度、监控、止血。灰度属于测试范畴,止血则是亡羊补牢,今天我们来聊聊监控,提起监控,就不得不提在DepOps(自动化运维)领域鼎鼎有名的Prometheus(普罗米修斯),有人说这个开源系统的名字怎么有点如雷贯耳啊,没错,它的名字就是取自从宙斯手中为人类夺回圣火的古希腊神明普罗米修斯,而Prometheus的Logo恰恰就是奥林匹克圣火。Prometheus主要的功能就是可以无时不刻的监控所有部署在生产环境中的服务,如果服务出现问题则会

我们知道,奉行长期主义的网络公司,势必应在软件开发流程管理体系上具备规范意识,即代码提交有CR(CodeReview),功能测试上自动化,而功能发布讲究三板斧:灰度、监控、止血。灰度属于测试范畴,止血则是亡羊补牢,今天我们来聊聊监控,提起监控,就不得不提在DepOps(自动化运维)领域鼎鼎有名的Prometheus(普罗米修斯),有人说这个开源系统的名字怎么有点如雷贯耳啊,没错,它的名字就是取自从宙斯手中为人类夺回圣火的古希腊神明普罗米修斯,而Prometheus的Logo恰恰就是奥林匹克圣火。Prometheus主要的功能就是可以无时不刻的监控所有部署在生产环境中的服务,如果服务出现问题则会及时报警以提醒开发者。

本次我们利用Docker和Prometheus以及周边的其他生态来搭建一套属于自己的全时监控告警平台,系统采用Centos7.6。

首先在系统中安装Docker:

#升级yum  
sudo yum update  
#卸载旧版本docker  
sudo yum remove docker  docker-common docker-selinux docker-engine  
#安装依赖  
sudo yum install -y yum-utils device-mapper-persistent-data lvm2  
#设置源  
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  
sudo yum makecache fast  
#安装docker  
sudo yum install docker-ce  
  
#启动服务  
sudo systemctl start docker

安装成功后查看版本:

[root@instance-53r3vagg tmp]# docker -v  
Docker version 19.03.14, build 5eb3275d40

在下载镜像之前,我们需要设置一下国内源,用来提高下载速度,执行sudo vim /etc/docker/daemon.json 命令创建新文件,并添加如下代码:

{  
    "registry-mirrors": ["https://d7grpode.mirror.aliyuncs.com"]  
}

重启Docker:

sudo systemctl restart docker

随后拉取Prometheus的Docker镜像:

docker pull prom/prometheus:latest

这里我们以监控Redis数据库为例子,所以还需要拉取redis和redis状态收集器两个镜像:

docker pull redis  
docker pull oliver006/redis_exporter:latest

分别启动redis和redis状态收集器:

启动redis:

docker run -d --name redis -p 6379:6379 redis

启动redis状态收集器

docker run -d --name redis_exporter -p 9121:9121 oliver006/redis_exporter:latest --redis.addr redis://120.48.20.113:6379

这里redis\_exporter监听服务器上的redis服务,而redis\_exporter运行在9121端口上,注意redis的地址写服务器的公网ip。

运行docker ps查看服务:

[root@instance-53r3vagg tmp]# docker ps  
CONTAINER ID        IMAGE                                   COMMAND                  CREATED             STATUS              PORTS                    NAMES  
51349113892a        redis                                   "docker-entrypoint.s…"   52 minutes ago      Up 52 minutes       0.0.0.0:6379->6379/tcp   redis  
0ffcf81ea7ff        oliver006/redis_exporter:latest         "/redis_exporter --r…"   About an hour ago   Up About an hour    0.0.0.0:9121->9121/tcp   redis_exporter  

随后创建prometheus的配置文件

vim /tmp/prometheus.yml

加入下面代码:

scrape_configs:  
  
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.  
  - job_name: 'redis'  
   
  
    # Override the global default and scrape targets from this job every 5 seconds.  
  
    scrape_interval: 5s  
  
  
    static_configs:  
  
      - targets: ['120.48.20.113:9121']

这里每隔5秒就获取一下服务运行信息,注意服务器地址要写公网ip,随后启动prometheus服务:

docker run -d -p 9090:9090 -v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus:latest

此时,prometheus就运行在9090端口上,访问一下:http://120.48.20.113:9090/targets

就可以看到redis服务正在运行,与此同时,也可以查询一些参数,比如内存占用:

监控我们已经做到了,但是如果redis服务挂了怎么办,如何第一时间让研发人员知晓情况是首要课题,还在用原始的邮件通知?还记得钉钉机器人么?这里我们引入一个报警机器人,来实现24小时全时报警的功能,创建一个机器人:

这里需要注意一点,安全设置选择ip过滤,将公网ip填入:

ok,前置操作搞定了,接下来我们继续利用Docker拉取两个镜像:

docker pull prom/alertmanager:latest
docker pull timonwong/prometheus-webhook-dingtalk:v1.4.0

分别是prometheus的告警模块以及钉钉机器人插件,流程是如果prometheus检测到服务器异常,就会通过请求钉钉机器人的webhook地址来发送告警通知。

编写告警配置文件:

vim /tmp/alertmanager.yml

添加代码:

global:  
  resolve_timeout: 5m  
route:  
  receiver: webhook  
  group_wait: 30s  
  group_interval: 5m  
  repeat_interval: 5m  
  group_by: [alertname]  
  routes:  
  - receiver: webhook  
    group_wait: 10s  
receivers:  
- name: webhook  
  webhook_configs:  
  - url: http://120.48.20.113:8060/dingtalk/webhook1/send  
    send_resolved: true

同时编写告警规则:

vim /tmp/redis.rules

添加代码:

groups:  
- name: redis  
  rules:  
  - alert: redis  
    expr: up{job="redis"} == 0  
    for: 15s  
    labels:  
      severity: 1  
      team: node  
    annotations:  
      summary: "恭喜您,您的redis服务已经挂掉啦"

最后,修改一下prometheus的配置文件,将告警设置配置好:

vim /tmp/prometheus.yml

修改代码:

scrape_configs:  
  
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.  
  
  - job_name: 'redis'  
  
  
    # Override the global default and scrape targets from this job every 5 seconds.  
  
    scrape_interval: 5s  
  
  
    static_configs:  
  
      - targets: ['120.48.20.113:9121']  
  
alerting:  
  alertmanagers:  
  - static_configs:  
    - targets:  
      - 120.48.20.113:9093  
  
rule_files:  
  - "/etc/prometheus/redis.rules"

重启prometheus服务:

docker run -d -p 9090:9090 -v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml -v /tmp/redis.rules:/etc/prometheus/redis.rules  prom/prometheus:latest

注意,这里和第一次启动prometheus有所不同,这次我们通过-v挂载命令将redis.rules挂载到容器内部使用,随后启动告警服务以及钉钉插件:

启动告警模块:

docker run -d --name alertmanager -p 9093:9093 -v /tmp/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager:latest

启动钉钉插件:

docker run -d -p 8060:8060 --name webhook timonwong/prometheus-webhook-dingtalk --ding.profile="webhook1=https://oapi.dingtalk.com/robot/send?access_token=钉钉token"

注意将token替换成自己的机器人token。

再次访问http://120.48.20.113:9090/rules

可以看到告警配置已经生效了,现在我们简单模拟一下redis的宕机

[root@instance-53r3vagg tmp]# docker stop redis_exporter  
redis_exporter

prometheus监控立刻发现问题:

如果宕机持续10秒,则会立刻触发firiing(警告):

同时,钉钉机器人立刻发送信息:

整个过程滴水不漏,当然了,如果你觉得prometheus的监控界面过于简陋,可以使用Grafana将监控数据可视化:

docker run -d --name prom-dashboard -p 3000:3000

访问地址:http://120.48.20.113:3000/

默认账号密码是admin/amdin。

导入数据:

选择prometheus

配置prometheus地址和端口:

随后就能以图形化界面来监控服务了:

结语:监控是整个项目生命周期中至关重要的一环,灾前及时预警发现故障,灾后提供详实的数据用于追查定位问题,而prometheus正是这样一个承前启后继往开来的监控宗师,区区5个镜像就可以帮助我们打造全时无死角监控预警体系。

相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
7月前
|
Prometheus 监控 Cloud Native
Prometheus+Grafana(docker安装)
本文档详细介绍了如何使用Docker容器快速部署Prometheus监控系统和Grafana数据可视化平台。该方案适用于需要快速搭建监控环境的开发测试场景,具备部署简单、资源占用低、易于维护等特点。
|
9月前
|
网络协议 API Docker
Docker+consul容器服务的更新与发现
通过本文的介绍,我们详细探讨了如何结合Docker和Consul来实现容器服务的更新与发现。通过Consul的服务注册和发现功能,可以高效地管理和监控容器化服务,确保系统的高可用性和可扩展性。希望本文能帮助您在实际项目中更好地应用Docker和Consul,提高系统的可靠性和管理效率。
223 23
|
9月前
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
239 20
|
8月前
|
安全 持续交付 云计算
课时5:阿里云容器服务:最原生的集成Docker和云服务
阿里云容器服务以服务化形式构建容器基础设施,大幅提升开发效率,简化应用部署流程。通过Docker容器和DevOps工具(如Jenkins),实现自动化部署与迭代,优化企业内部复杂部署问题。该服务支持GPU调度、混合云架构无缝迁移,并与阿里云产品体系无缝集成,提供安全防护、网络负载均衡等多重功能支持。凭借微服务架构,帮助企业突破业务瓶颈,提高资源利用率,轻松应对海量流量。
262 0
课时5:阿里云容器服务:最原生的集成Docker和云服务
|
10月前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
537 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
11月前
|
存储 数据采集 Prometheus
Grafana Prometheus Altermanager 监控系统
Grafana、Prometheus 和 Alertmanager 是一套强大的开源监控系统组合。Prometheus 负责数据采集与存储,Alertmanager 处理告警通知,Grafana 提供可视化界面。本文简要介绍了这套系统的安装配置流程,包括各组件的下载、安装、服务配置及开机自启设置,并提供了访问地址和重启命令。适用于希望快速搭建高效监控平台的用户。
554 20
|
11月前
|
Prometheus 监控 Cloud Native
Prometheus+Grafana监控Linux主机
通过本文的步骤,我们成功地在 Linux 主机上使用 Prometheus 和 Grafana 进行了监控配置。具体包括安装 Prometheus 和 Node Exporter,配置 Grafana 数据源,并导入预设的仪表盘来展示监控数据。通过这种方式,可以轻松实现对 Linux 主机的系统指标监控,帮助及时发现和处理潜在问题。
923 7
|
11月前
|
Prometheus 监控 前端开发
Grafana 安装配置教程,让你的 Prometheus 监控数据变得更美观
《Grafana安装配置教程,让你的Prometheus监控数据变得更美观》简介: Grafana是一个开源的度量分析与可视化工具,支持多种数据源(如Prometheus),提供丰富的可视化功能和警报机制。本文详细介绍了Grafana的安装、汉化方法及模板使用,帮助用户轻松创建美观、灵活的数据面板,并实现数据的协作与共享。通过Docker镜像、配置文件修改或替换前端页面等方式实现汉化,让用户更便捷地使用中文界面。此外,还提供了导入JSON格式模板的具体步骤,方便快速搭建仪表盘。
1027 2
|
12月前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第26天】Prometheus与Grafana是智能运维中的强大组合,前者是开源的系统监控和警报工具,后者是数据可视化平台。Prometheus具备时间序列数据库、多维数据模型、PromQL查询语言等特性,而Grafana支持多数据源、丰富的可视化选项和告警功能。两者结合可实现实时监控、灵活告警和高度定制化的仪表板,广泛应用于服务器、应用和数据库的监控。
1063 3
|
11月前
|
Prometheus 运维 监控
Prometheus+Grafana+NodeExporter:构建出色的Linux监控解决方案,让你的运维更轻松
本文介绍如何使用 Prometheus + Grafana + Node Exporter 搭建 Linux 主机监控系统。Prometheus 负责收集和存储指标数据,Grafana 用于可视化展示,Node Exporter 则采集主机的性能数据。通过 Docker 容器化部署,简化安装配置过程。完成安装后,配置 Prometheus 抓取节点数据,并在 Grafana 中添加数据源及导入仪表盘模板,实现对 Linux 主机的全面监控。整个过程简单易行,帮助运维人员轻松掌握系统状态。
1530 3

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版