阿里云解决方案最佳实践,是基于众多客户上云的成功案例萃取而成的最优化企业上云指导。每个最佳实践包括使用场景、多产品部署架构及部署手册,帮助客户更好地理解阿里云的产品和解决方案,降低企业上云门槛的同时满足客户自服务的需求。感兴趣的朋友可以访问最佳实践官网了解更多内容 bp.aliyun.com
一、概述
1、 场景描述
- 客户现状
告警对于企业的开发运维,安全运维,业务运维有着至关重要的作用。然而很多企业在告警运维方面存在着重复建设、监控质量差、告警风暴、触达不人性化、无法闭环等问题。 - 方案目标
针对企业在告警管理方面存在的痛点问题,SLS 告警提供了一站式云上告警管理方案,具有弹性易用、稳定可靠、功能持续升级、成本更低、噪音更少等优势。企业可以将现有的监控方案系统无缝接入到 SLS 告警平台,实现在 SLS 上一站式管理告警。
2、统一告警系统架构
基于以上场景,我们创建了统一告警系统架构。通SLS采集日志或数据库信息发送给告警监控,进行分组或评估后发送给告警中心,同时告警系统也支持开源的监控平台,通过开放告警平台,将数据进行过滤和映射,然后推送到告警中心。告警中心将接收到的告警信息进行加工和存储,最终通过云或者短信、邮件等形式,将告警信息推送给企业运维工程师,及时掌握系统告警情况,以确保业务的稳定。
3、本次实践的系统架构
基于统一告警系统架构,我们设计了本次实践的业务系统架构。
4、方案优势
- 易用弹性:一站式、快速开始、易于复制;
- 稳定可靠:海量数据、服务3个9,存储10个9;
- 功能持续升级:一体化数据、标准语法、AI全面监控、降噪与通知能力;
- 更低成本:无订阅费、免运维、渠道收费低;
- 更少噪音:告警全链路智能降噪与管理;
- 更快恢复:更快速的排查根因、解决故障;
5、方案的价值
- 告警管理是可观测性平台的重要组成部分,内置了对云产品的多种监控告警规则,为用户使用云产品保驾护航;
- 一站式智能告警运维平台,开箱即用,内置各场景下监控规则(500+);
- 云原生可观测性平台实时监控告警,免运维,提高开发效率;
- 开放告警:支持常见的监控系统Zabbix/Promethus/Grafana直接发送告警到SLS,统一进行告警管理;
- 支持灵活的告警编排,降噪控制,事务管理,通知管理;全面提升IT效率,减少IT成本;
二、操作实践
前置条件:为了顺利完成本实践,您需要提前完成以下准备工作:
1、资源环境部署
本实践可使用云速搭 CADT 快速部署资源环境。
CADT 使用手册请参见:https://help.aliyun.com/document_detail/186134.html
说明:请根据环境部署须知中的提示,更新相关资源项的配置项,保存应用后部署。
操作步骤
- 登录云速搭 CADT 控制台。(https://bpstudio.console.aliyun.com)
- 选择新建 > 官方模版库新建进入接官方模板库;
- 在官方模板库,输入搜索关键字找到SLS 统一日志监控模版,选择基于方案新建;
- 在架构编辑界面,根据架构部署提示,修改 OSS、SLS 名称(保持唯一);修改4个ECS实例登录密码;
- 配置完成后,单击右上角的保存,设定应用名称后并单击确认;
- 应用保存成功后,单击部署应用;
- 资源校验成功后,单击下一步:价格清单;
- 计价完成后,确认各资源价格情况,确认无误,单击下一步:确认订单;
说明:可以单击查看报告,会实时生成一个应用架构成本分析报告。 - 勾选《云速搭服务条款》,单击下一步:支付并创建;
- 部署完成后,还可以下载云速搭CADT输出的部署报告。
2、创建告警通知策略
2.1.告警通知策略简介
告警通知策略是 SLS 告警提供的告警管理的核心功能模块,主要包括告警策略和行动策略。
- 告警策略:主要包括告警合并、静默、抑制等降噪功能;
- 行动策略:主要是通知渠道的设定、分派,除了支持非常丰富的通知渠道如:短信、语音、邮件、Webhook、企业微信、钉钉、Slack、飞书等,还支持强大的用户组、值班组、轮岗代班等功能;
2.2.添加用户
- 登录SLS控制台(https://sls.console.aliyun.com/lognext/profile),单击用 CADT 创建好的SLS实例:sls-bp235(示例名称);
- 单击左侧告警图标,进入告警中心,找到告警管理 > 用户管理;
- 添加用户test-xiaozhang,test-xiaoqian,test-xiaosun,test-xiaoli分别填入手机号和邮箱;
- 添加完成;
2.3.添加用户组
- 单击用户管理 > 用户组管理;
- 添加电商用户组和社区用户组,分别将之前创建的用户添加到用户组;
- 添加完成;
2.4.添加值班组
- 单击值班组管理,添加值班组;
- 单击创建,在弹出框输入值班组相关信息;
- 切换到值班表标签,选择值班轮岗;
- 添加值班轮岗;
- 切换到最终排班,查看排班效果;
- 单击保存;
- 保存成功;
2.5.添加行动策略
- 添加行动策略;
- 添加行动策略,填入 ID 和名称,然后单击全屏图标;
- 单击条件图标,添加条件;
- 条件对象选择严重度;
- 设置严重度为严重时,发送语音通知给值班组;然后条件单击确认,右侧单击结束图标;
- 严重度非严重的情况下,添加行动组;
- 添加行动组,增加短信和邮件渠道,分别发送给电商组和社区组,然后单击结束图标;
- 配置完成,单击退出全屏;
- 单击确认;
- 添加策略完成;
3、配置自定义告警
3.1.配置 Nginx 日志告警
3.1.1.采集 Nginx 真实日志
- 登录 ECS 控制台(https://ecs.console.aliyun.com/#/server/region/cn-beijing),选择用 CADT 创建好的 ECS 实例:ecs-bp235,进入远程连接;
- 在弹出的远程连接页面,单击立即登录;
- 在远程登录页面,输入 CADT 上对 ECS 设置的密码,单击确定;
-
安装 Nginx 组件并启动 nginx 服务;
- 执行以下命令
yum install yum-utils -y
touch /etc/yum.repos.d/nginx.repo - 修改 nginx.repo
vim /etc/yum.repos.d/nginx.repo - 配置内容
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true - 执行命令
yum install nginx -y
systemctl start nginx.service
- 执行以下命令
- 用浏览器打开 ECS 的公网 IP,去访问 nginx,产生日志数据;
- 登录 SLS 控制台,选择用 CADT 创建好的 SLS 实例:sls-bp235,进入详情页;
- 在详情页中,单击接入数据;
- 在弹出框的快速数据接入中,选择 NGINX-文本日志;
- 进入 Nginx 日志接入页面,按下面的配置,选择用 CADT 创建的 ECS 机器,单击立即执行;
- 执行需要等待一定的时间,请耐心等待,直到状态为成功;
- 输入名称,创建机器组,单击下一步;
- 对机器组进行配置;
-
配置 Logtail,部分关键字段配置如下:
- 配置名称:logconfig
- 日志路径:/var/log/nginx 和 *.log
- NGINX 日志配置:
log_format main
'$remote_addr - $remote_user [$time_local] "$request" '
'$request_time $request_length '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent"'; - 日是样例
106.11.31.2 - - [23/Sep/2021:16:15:29 +0800] "GET /nginx-logo.png
HTTP/1.1" 200 368 "http://123.56.121.18/abc.test" "Mozilla/5.0
(Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/87.0.4280.88 Safari/537.36" "-"
- 检查日志导入后的数据(可能需要等 1 分钟左右,可单击刷新按钮),单击下一步;
- 配置完成,点击查询日志;
- 返回到日志首页,检查日志数据;
3.1.2.使用 Nginx 模拟日志
- 登录 SLS 控制台,选择用 CADT 创建好的 SLS 实例:sls-bp235,进入详情页;
- 打开创建好的日志库实例 logstore-bp235,展开数据接入,单击模拟接入;
- 在弹出框的快速数据接入中,选择 NGINX 访问日志,单击“模拟”,进入模拟页面;
注意:这里要单击“模拟”按钮,不要直接点整个方框。 - 进入 Nginx 日志模拟接入页面,直接使用默认的配置,单击开始导入;
- 导入过程需要等待一定的时间,请耐心等待进度条;
- 导入完成后,单击开始使用;
- 可以查看到 SLS 产生了大量的模拟数据;
3.1.3.对 Nginx 日志进行告警配置
上两步的操作,我们分别通过安装 nginx 产生真实数据和通过模拟的方式产生了大量的 nginx 日志,接下来我们将对日志进行告警分析处理。
- 输入查询分析语句:
status >= 500 | SELECT count(1) as err_cnt - 单击右上角的另存为告警 > 新版告警;
- 填写告警名称和动态告警严重度的配置;
- 修改标注描述;
- 选择告警策略,选择普通模式,在行动策略下拉框选择之前配置的“测试行动策略”;
- 然后单击确定按钮,告警创建成功;
3.1.4.查看 Nginx 告警统计
- 在告警中心,选择上述步骤创建的监控规则,单击规则名称;
- 查看本规则下,具体的告警统计信息;
- 手机和邮箱也会收到相应的告警信息;
3.2.配置 OSS 日志告警
3.2.1.配置 OSS 访问日志
开通 OSS 访问日志,阿里云对象存储(OSS)联合日志服务推出 OSS 访问日志实时查询功能。
- 登录 OSS 管理控制台(https://oss.console.aliyun.com/bucket),找到用 CADT 创建的 OSS 实例(本实践是 oss-bp235);
- 在 Bucket 列表中,单击目标 Bucket 名称(本实践是 oss-bp235),再单击日志管理 >实时查询;
- 单击立即开通。开通后,日志服务立即开始采集日志,并默认为您创建专属 Project、Logstore 以及配置索引;
- 登录 SLS 控制台,搜索到资源环境部署中配置的 oss 访问日志 project,单击进入;
- 查看告警规则列表;
- 找到 OSS 访问 PV 同比昨日变化率过高告警,单击右侧的添加按钮,在弹出框中其他值都保持默认,行动策略修改为之前创建的测试行动策略,最后单击设置并开启;
- 在告警中心的状态栏,选择已开启,下面告警规则列表会显示已经开启的告警规则,即为上述步骤开启的告警规则;
3.2.2.使用 OSS 模拟日志
- 登录 SLS 控制台,选择用 CADT 创建好的 SLS 实例:sls-bp235,进入详情页;
- 打开创建好的日志库实例 logstore-bp235,展开数据接入,单击模拟接入;
- 在弹出框的快速数据接入中,选择 OSS 访问日志,单击“模拟”,进入模拟页面;
- 配置可以默认,单击开始导入,等待 2 分钟;
- 导入完成后,单击开始使用;
- 可以查看到 OSS 产生了大量的模拟数据;
3.2.3.查看 OSS 告警统计
- 打开 OSS 自动生成的 SLS Project,单击告警,进入告警中心;
- 找到“OSS 访问 PV 同比昨日变化率过高告警”,单击进入详情页;
- 可以查看告警的统计信息;
3.3.配置 Prometheus 开放告警
日志服务支持通过 Webhook 方式接收外部监控系统中的告警消息(例如 Grafana告警、Prometheus告警)。您可以通过日志服务告警中的告警管理系统管理告警(降噪、事务管理等),然后通过通知管理系统发送告警通知给目标用户。
3.3.1.搭建 Prometheus 环境
- 登录 ECS 控制台(https://ecs.console.aliyun.com/#/server/region/cn-beijing),选择用 CADT 创建好的 ECS 实例:ecs-prometheus,进入远程连接;
- 在弹出的远程连接页面,单击立即登录;
- 在远程登录页面,输入CADT上对ECS设置的密码,单击确定;
- 下载并解压二进制安装包;
下载、解压、创建软链接:
wget https://code.aliyun.com/best-practice/235/raw/master/prometheus-2.13.0.linux-amd64.tar.gz
tar -xf prometheus-2.13.0.linux-amd64.tar.gz
mv prometheus-2.13.0.linux-amd64 /usr/local/
ln -s /usr/local/prometheus-2.13.0.linux-amd64/ /usr/local/prometheus - 创建 prometheus 的用户及数据存储目录;
useradd -s /sbin/nologin -M prometheus
mkdir /data/prometheus -p
修改目录属主
chown -R prometheus:prometheus /usr/local/prometheus/
chown -R prometheus:prometheus /data/prometheus/ - 创建 Systemd 服务启动 prometheus;
vim /etc/systemd/system/prometheus.service
复制下列代码
[Unit]
Description=Prometheus
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/prometheus/prometheus --
config.file=/usr/local/prometheus/prometheus.yml -- storage.tsdb.path=/data/prometheus
Restart=on-failure
[Install]
WantedBy=multi-user.target - 启动 prometheus;
systemctl start prometheus
systemctl status prometheus
systemctl enable prometheus - 为ECS安全组配置端口以开放prometheus访问;
在配置规则中,入方向增加 9090、9100、3000、10050 端口开放;
3.3.2.配置开放告警对外接口
- 登录 SLS 控制台,单击 sls-bp235 进入;
- 单击开放告警;
- 创建开放告警服务;
- 创建完告警服务,单击菜单中的应用按钮;
- 创建应用;
- 填写应用信息及行动策略,单击保存;
- 应用创建成功;
-
创建 RAM 用户接入告警;
说明:为保证账号安全,强烈建议您使用 RAM 用户进行告警接入操作,不要直接使用阿里云账号。用于告警接入的 RAM 用户需具备AliyunLogPutOpenEventPolicy权限,具体操作如下:- 创建RAM用户。具体操作,请参见创建RAM用户(https://help.aliyun.com/document_detail/93720.htm);
- 授予RAM用户AliyunLogPutOpenEventPolicy权限。具体操作,请参见为RAM用户授权(https://help.aliyun.com/document_detail/116146.htm);
- 为RAM用户创建访问密钥(AccessKey ID)。具体操作,请参见为RAM用户创建访问密钥(https://help.aliyun.com/document_detail/116401.htm);
- 单击步骤7的接口按钮,弹出接口信息,接口信息中的{ACCESS_KEY_ID}为阿里云访问密钥中的 AccessKey ID,请根据步骤8中的AccessKey ID替换;
3.3.3.接入 Prometheus 告警到 SLS
在Prometheus中,将日志服务开放告警系统配置为一个Alertmanager组件。配置完成后,Prometheus 会将告警消息发送到日志服务告警系统中,由日志服务告警系统完成告警降噪、通知等处理。
- 重新登录搭建Prometheus环境中打开的 ECS 控制台(ecs-prometheus);
- 修改 Prometheus 配置;
cd /usr/local/prometheus
vim prometheus.yml -
在Prometheus配置文件中,替换原有的alertmanagers配置,即配置完成;
说明:- path_prefix:配置路径信息,此处配置为您在日志服务中创建开放告警服务和应用后生成的接口信息(子路径部分)。可从3.3.2的步骤9中获取公网地址;
参考:/event/webhook/RAMAK_LTAI5tHxvGh4vPbS/test-promethus_test-1 - targets:告警消息的接收端,此处配置为日志服务的访问域名;
参考:cn-heyuan.log.aliyuncs.com
- path_prefix:配置路径信息,此处配置为您在日志服务中创建开放告警服务和应用后生成的接口信息(子路径部分)。可从3.3.2的步骤9中获取公网地址;
- 配置告警规则;
cd /usr/local/prometheus
wget https://code.aliyun.com/best-practice/235/raw/master/linux-rules.yml
vim prometheus.yml - 重启 Prometheus 服务;
systemctl restart prometheus - 查看Prometheus的Alerts页面,规则配置完成;
URL:http://123.56.102.189:9090/alerts(IP 地址为 ecs-prometheus 的公网地址)
3.3.4.配置增加监控对象
为了能够体验到真实的告警数据通过Prometheus推送到 SLS 中,我们特定用一台ECS去产生告警的数据,让Prometheus捕获。
- 在ECS管理控制台,打开通过CADT创建的被监控ECS(名称为:ecs-monitored)的控制台;
- 下载并安装node_exporter服务,接入到prometheus中;
wget https://code.aliyun.com/best-practice/235/raw/master/node_exporter-1.2.2.linux-amd64.tar.gz
tar -zxf node_exporter-1.2.2.linux-amd64.tar.gz -C /usr/local/
cd /usr/local/
mv node_exporter-1.2.2.linux-amd64/ node_exporter - 创建系统服务并启动;
touch /usr/lib/systemd/system/node_exporter.service
vi /usr/lib/systemd/system/node_exporter.service
文件中加入以下配置信息:
启动 node_exporter 并设置为开启自启动:
systemctl enable node_exporter.service
systemctl start node_exporter.service
systemctl status node_exporter.service - 启动成功,测试node_exporter运行情况。本实例中用ECS(ecs-monitored)的公网IP地址加端口9100访问,即可。
本实例:http://101.200.74.60:9100/metrics - 将ecs-monitored节点加入到prometheus监控对象中。打开prometheus所在ECS(主机名:ecs-prometheus)的远程控制台;
vim /usr/local/prometheus/prometheus.yml
追加以下列代码:
-job_name: 'CentOS7_VMServer'
static_configs:
-targets: ['101.200.74.60:9100']其中这里的 IP 地址为 ECS(ecs-monitored)的公网 IP 地址。
修改完保存,并重启 prometheus 服务
systemctl restart prometheus.service
systemctl status prometheus.service - 再登录 prometheus 的 Web 界面可以看到新增的这个 Target;
3.3.5.生产告警数据
- 在ECS的管控控制台,打开通过CADT创建的被监控ECS(名称为:ecs-monitored)的控制台。
- 安装压测工具将该ECS的CPU使用率提高到 100%;
yum install -y stress sysstat - 执行压测脚本;
stress --cpu 1 --timeout 600
3.3.6.查看 Prometheus 告警
- 在 SLS 告警中心打开开放告警中心日志库;
- 单击中心日志库,可跳转到开放告警的SLS的Project中查看日志;
- 查看Prometheus的告警;
说明:在日志中可以看到大量的“CPU 使用率过高”的日志数据。 - 收到短信和邮件告警信息;
3.4.配置 Zabbix 开放告警
Zabbix作为常用的开源监控系统,提供了丰富的告警规则用于系统监控,同时支持多种告警通知渠道。日志服务告警系统可以设为Zabbix的一个通知渠道,由日志服务告警系统完成告警降噪、通知等处理。本节适用于Zabbix 4.4及以上版本。
3.4.1.搭建 Zabbix 环境
- 登录 ECS 控制台(https://ecs.console.aliyun.com/#/server/region/cn-beijing),选择用CADT创建好的ECS实例:ecs-zabbix,进入远程连接;
- 在弹出的远程连接页,单击立即登录;
- 在远程登录页面,输入 CADT 上对 ECS 设置的密码,单击确定;
- 在线安装 zabbix;
请参见《基于SLS实现统一告警最佳实践》3.4.1章节 - 用浏览器打开zabbix控制台(用zabbix的ECS配置的EIP打开):
http://39.107.226.142/EIP/zabbix - 完成配置进行zabbix管理后台
http://39.107.226.142/zabbix/index.php,输入管理员用户名 Admin(区分大小写),默认密码 zabbix,单击登入即可;
3.4.2.配置开放告警对外接口
- 登录SLS控制台,单击 sls-bp235 进入;
- 单击开放告警;
- 创建开放告警服务;
- 创建完告警服务,单击菜单中的应用按钮;
- 创建应用;
- 填写应用信息及行动策略,单击保存;
- 应用创建成功;
- 点击步骤7的接口按钮,弹出接口信息,接口信息中的{ACCESS_KEY_ID}为阿里云访问密钥中的AccessKey ID,请根据实际值的AccessKey ID替换。
3.4.3.接入 Zabbix 告警
- 下载配置文件(zabbix-4.4.xml)
https://code.aliyun.com/best-practice/235/blob/master/zabbix-4.4.xml
保存到本地为zabbix-4.4.xml文件; - 添加Alibaba Cloud SLS (Log Service)通知渠道;
(1)在zabbix控制台导航栏中,选择Administration > Media types;
(2)在Media types页面的右上角,单击Import;
(3)在 Import 对话框中,选择您已下载的zabbix-4.4.xml文件,选中 Create new,然后单击 Import;
(4)在Media types页面中,单击Alibaba Cloud SLS (Log Service);
(5)在Parameters配置项中,修改hook_url字段的值,然后单击Update;
Hook_url 参考:http://cn-heyuan.log.aliyuncs.com/event/webhook/RAMAK_LTAI5tHxvGh4vPbS/test-zabbix_test-1 - 为目标用户设置通知渠道;
(1)在zabbix控制台导航栏中,选择Administration > Users;
(2)在用户列表中,可以单击Create user,创建一个新用户;
(3)在Media页签中,创建一个新的Media;
(4)保存后,单击Update; - 配置触发器;
(1)在左侧导航栏中,选择Configuration > Actions,Event source选中默认的Trigger类型,单击“Report problems to Zabbix administrators”;
(2)在Operations页签中,单击Operations区域中的New;
(3)在Operations details对话框中,选择目标用户或用户组,以及配置 Send only to为Alibaba Cloud SLS (Log Service),最后点击 Update;
3.4.4.配置 zabbix agent
为了能够体验到真实的告警数据通过Zabbix推送到SLS中,我们用一台ECS去产生的告警数据,让Zabbix捕获。
- 在ECS的管控控制台,打开通过CADT创建的被监控ECS(名称为:ecs-monitored)的控制台;
- 安装zabbix agent服务,接入到zabbox server中;
请参见《基于SLS实现统一告警最佳实践》3.4.4章节 - 停止3.3章节中prometheus的监控,以免引起数据的干扰;
systemctl stop node_exporter - 执行压测脚本;
stress --cpu 1 --timeout 6000
3.4.5.配置zabbix服务端
本小节将在zabbix服务端增加客户端,将安装了zabbix agent的云主机纳入到服务器的监控管控中。
- 在Zabbix服务端的面板中依次单击:Configuration——>Hosts——>Create host(即ecs-monitored这台ECS);
- 添加完后点击Add,稍等一会儿状态变为绿色。至此,客户端主机添加完成!此时如果记录不是绿色,请注意在ECS的安全组中,入口端口10050是否没有添加(步骤 3.3.1 的步骤 8)。
3.4.6.查看Zabbix告警
- 在SLS告警中心打开开放告警中心日志库;
- 单击中心日志库,可跳转到开放告警的SLS的Project中查看日志;
- 查看zabbix的告警;
告警内容为:alert_name:"Load average is too high (per CPU load over 1.5 for 5m)" - 收到短信和邮件告警信息。
附加说明:
如果您已经完成了本实践,可以通过CADT的资源释放功能,可以一键将本次实践创建的云资源全部释放。