原文转载自「刘悦的技术博客」https://v3u.cn/a_id_181

我们知道,奉行长期主义的网络公司,势必应在软件开发流程管理体系上具备规范意识,即代码提交有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

分别是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个镜像就可以帮助我们打造全时无死角监控预警体系。

原文转载自「刘悦的技术博客」 https://v3u.cn/a_id_181

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

  1. centos7.2环境elasticsearch-5.0.1+kibana-5.0.1+zookeeper3.4.6+kafka_2.9.2-0.8.2.1部署详解

    centos7.2环境elasticsearch-5.0.1+kibana-5.0.1+zookeeper3.4.6+kafka_2.9.2-0.8.2.1部署详解 环境准备: 操作系统:centos ...

  2. centos7.6环境下编译安装tengine-2.2.2的编译安装

    centos7.6环境下编译安装tengine-2.2.2的编译安装 .获取tengine2..2的源码包 http://tengine.taobao.org/download/tengine-2.2 ...

  3. centos7.2环境下安装smokeping对网络状态进行监控

    centos7.2环境下安装smokeping对网络状态进行监控 安装smokeping建议用centos7,用centos6.5一直卡在smokeping那里,下载不了perl的扩展插件,可能是因为 ...

  4. centos7.2环境nginx+mysql+php-fpm+svn配置walle自动化部署系统详解

    centos7.2环境nginx+mysql+php-fpm+svn配置walle自动化部署系统详解 操作系统:centos 7.2 x86_64 安装walle系统服务端 1.以下安装,均在宿主机( ...

  5. CentOS7.3环境下源码安装httpd

    CentOS7.3环境下源码安装httpd 本文在CentOS7.3下,源码安装apache服务httpd2.4. 1.下载好源码安装包 [root@localhost ~]#ll total 625 ...

  6. centos7.2环境yum方式快速搭建lnmp环境nginx+mariadb+php-fpm

    centos7.2环境yum方式安装nginx+mariadb+php-fpm 1.安装lnmp环境 安装epel源 yum install -y epel-release 安装 MySQL + PH ...

  7. 虚拟化环境下的CentOS7网络环境存在的问题

    http://dgd2010.blog.51cto.com/1539422/1592821/ 为什么要进行一次测试? 在使用CentOS7的过程中发现网络部分有很多与CentOS6所不同的地方. 1. ...

  8. 新装系统(CentOS7.4)环境初始化配置笔记

    新装系统(CentOS7.4)环境初始化配置笔记 一.概述 设备详情: Dell R730 服务器 (四个网卡,一根网线插在第2个网卡上) CentOS 7.4 x64 最小安装环境 二.网络环境配置 ...

  9. Linux环境基于CentOS7 搭建部署Docker容器

    1.Docker容器概述 区分Docker容器技术和VM虚拟机技术: evernotecid://394EFE90-9CE0-4D65-A8CD-DFEC0DC8061E/appyinxiangcom ...

随机推荐

  1. Git拉取远程新分支

    1.查看本地分支  git branch 2.查看远程分支  git branch -a 3.如果要拉取的远程分支本地没有 git fetch 4.拉取远程新分支到本地 git checkout -b ...

  2. sqlserver2008 数据库中查询存储过程的的创建修改和执行时间,以及比较常见的系统视图和存储过程

    因为各种原因数据库中存在大量无用的存储过程,想查询存储过程的最后执行情况,处理长期不使用的存储过程 下面这条语句可以查询存储过程创建 修改和执行的最后时间: SELECT a.name AS 存储过程 ...

  3. pycharm相关介绍

    一.settings设置   1.搜font 设置字体 2.Keymap------快捷键 二.常用快捷键 1.Ctrl + Enter:在下方新建行但不移动光标: 2.Shift + Enter:在 ...

  4. 开发工具-Typora编辑器下载地址

    更新记录 2022年6月10日 完善标题. 比较好用的Markdown编辑器了,哈哈. https://typoraio.cn/

  5. Java 泛型中的通配符

    本文内容如下: 1. 什么是类型擦除 2.常用的 ?, T, E, K, V, N的含义 3.上界通配符 < ?extends E> 4.下界通配符 < ?super E> 5 ...

  6. SpringBoot之缓存

    一.准备工作 首先整合使用Spring整合MyBatis. 可参阅:SpringBoot整合MyBatis SpringBoot整合MyBatis完后后,我们需要在pom.xml中添加缓存相关的依赖. ...

  7. zabbix监控mysql主从同步

    获取主从复制sql线程和I/O线程状态是否为yes #!/bin/bash HOSTNAME="数据库IP" PORT="端口" USERNAME=" ...

  8. python小题目练习(三)

    题目:输出1!+2!+3!+--+10!的结果代码实现: # 定义一个函数来递归实现阶乘操作def cycle(num): if num == 1: return 1 else: return num ...

  9. Tensorflow2 深度学习十必知

    博主根据自身多年的深度学习算法研发经验,整理分享以下十条必知. 含参考资料链接,部分附上相关代码实现. 独乐乐不如众乐乐,希望对各位看客有所帮助. 待回头有时间再展开细节说一说深度学习里的那些道道. ...

  10. NC17059 队列Q

    NC17059 队列Q 题目 题目描述 ZZT 创造了一个队列 Q.这个队列包含了 N 个元素,队列中的第 i 个元素用 \(Q_i\) 表示.Q1 表示队头元素,\(Q_N\) 表示队尾元素.队列中 ...