开发者学堂课程【DevOps 日志分析实战:课时4:监控数据分析】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/302/detail/3521
课时4:监控数据分析
内容介绍:
一、监控的层次
二、监控数据分析大图
三、查询语法
四、举例
一、 监控的层次
平常做监控的时候会分成四个层次,最下面的是基础设施和网络设备,在这之上就是网络操作系统,操作系统之上会有数据库和中间件,应用和业务会构建在这些设施上面。
现在是云的时代,基础设施和网络基本上不用考虑,本节讲的主要是上面三个层面,用这三个场景来看一下用在 SLS 监控上做的一些最佳实践。
二、 监控数据分析大图
SLS 可以充分利用开源生态的,是支持 Prometheus Expoter 或者telegraf plugin,他们支持的对象 SLS 也是同样支持的。
所以我们可以监控操作系统 Linux、Windows 或者 ProgreSQL 以及各种各样的中间件,包括像 Spring BOOT 的应用,也可以用它监控起来。
提供的采集途径主要有三种,一种是通过 Prometheus 来采集然后通过它的 remote write 的协议来写入,或者通过 telegraf 的协议来写入,或者 logtail 本身也提供了一些监控的插件让大家能够做一些快捷的监控,比如说主机监控就是由 logtail 来实现的。采集器最终会把这个数据携带存储,也就是 SLS 存储到 MetricStore 上面来,因为 SLS 本身有自己的 Dashboard,所以这个 Dashboard 也可以配置查询来做一些可视化,因为也支持Prometheus的协议,所以说 MetricStore 又可以去跟 Grafana 做对接,通过 Prometheus的数据源对接到 Grafana 里去做可视化。整体来说查询是以 MetricStore 为核心,MetricStore 是支持 PromQL 以及完整的 SQL 的。
可视化的能力由 SLS Dashboard 和 Grafana 来做的。
三、 查询语法
因为支持将 SQL 和 Prometheus 来进行结合,最简单的写法:
SELECT
promql_query_range('up','1m')
FROM metrics;
query_range 对应 Prometheus 里的 query_range API,up 是PromQL 的一个查询语句,1m 表示数据间隔。
在这个查询外面,还可以嵌套 SQL,利用 SQL 的任意语法来做一些分析:
SELECT
sum(value)
FROM
(SELECT promql_query_range('up,'1m') FROM metrics);
SELECT
sum(value)
FROM
(SELECT promql_query_range('up,'1m') FROM metrics);
可以参考一下实际例子:
在 Metrics 这里可以去选择指标,然后点击预览,这个数据就查询出来了,这是一个最简单的查询。直接的查询他没有做任何的聚合,也可以对他做一些聚合。这就是最简单的用法,后续会用一些具体的场景演示更复杂的用法。
在这之前,可以先探索一下 PromQL
数据类型:Guage,Counter,Summary,Histogram
Metric Selector
瞬时向量和区间向量
聚合函数
PromQL 里面有一个 metric、 label selector,组合起来会选择一组时间线,这组时间线可以对它做一个时间维度上的计算。当要做时间维度上的计算时,要先给它定一个区间,附加一个区间向量计算,最外面还可以套一个聚合函数,聚合函数对中间部分选择的指标做 group by。
四、 举例
1. 主机监控:数据流
主机监控就是通过 Logtail 做查询,Logtail 会去它的操作系统把对应的指标获取到,定期的写到 MetricStore,再写到 SLS Dashboard 去做可视化。
这个例子里,SLS 已经内置快捷进入方式,点击 logtail 配置,选择主机监控,然后选择机器组,选择已经建好的,如图就是一个配置
点击下一步,这样数据就已经接入了
再回到 logtail 配置,下方会多出一个 metric_system,这就是刚刚配置的选项,接下来稍等一会,就可以看到数据的产生。
或者也可以用 promql_queey 来查看原始数据,跳转到查询页面,输入 *|select promql_query('cpu_sys_ut11[5m]') from metrics
,然后查询,通过查看时间,可以观察是否接入成功。
接入成功后,内置好了一个 dashboard,在仪表盘主机监控可以看到,已经配置好了所有的可视化,对 promql_query 不太熟悉,可以在预览查询语句参考如何写。
监控数据分析大图还可以看出,采集器是 prometheus 和 telegraf的接入,这两个会分别再用另外的产品去演示,一个是 MySQL 的监控,另一个是用 Spring BOOT 的监控。
2. 数据库监控:数据流
MySQL 的监控会用 telegraf 做演示。一个插件连入 MySQL,去读取它的性能指标,然后 telegraf 通过 influxdb 的协议把它写给 logtail,logtail 再写入 MetricStore,再通过 dashboard 就可以做一些可视化。数据库的监控大部分比较复杂,配置在文稿里都已经提供了。
首先在 MetricStore 里找到 telegref,新建一个配置,叫做自定义数据插件,选择已有的机器组,输入配置名称,输入以下插件配置:
{
"inputs":
[
{
"detail":{
"Fornat":"influx",
"Address":":8476"
}
"type": "service_http
_
server"
}
],
"global":{
"AlwaysOnline": true,
"DelayStopSec":500
}
}
这样就已经配置完成了,返回到 telegraf 可以看到 telegraf 下面会多出一个刚刚输入的配置名称,这只是 logtail 其中的一个端口,我们还需要用 telegraf 把数据采集回来写给 logtail,操作步骤如下:首先,要修改 telegeaf 的配置,修改 telegrafconf etctelegraf/telegrafconf,建议备份原文件。然后需要创建 MySQL的采集配置,在 telegrafD 下面新建一个 MySQL.conf,最重要的一点是要注意修改 servers 字段为对应的 MySQL 连接串重启 telegraf 即可:
1 sudo service telegraf relead
2 #或者
3 sudo Systenctl reload telegraf
稍等1-2分钟刷新页面,选择 Metrics,即可看到数据,MySQL 监控暂时未提供预置 dashboard 可自行配置,后续 SLS 将对常用数据库和中间件提供默认 dashboard 模板。
数据监控也可以类似主机监控一样,用 dashboard 做可视化,后续会提供一些模板可供使用。
3. 应用监控
应用监控中我们以 SpringBoot 应用为例,使用SpringBootActuator 暴露数据,通过 Prometheus 采集,并使用 remotewrite 协议写入 MetricStore,再使用 Grafana 对接做可视化整个数据流如下:
(1) 首先我们需要引入两个依赖:
Actuator 是 Springboot 提供的一个标准的监控的主件,会暴露出一些应用内部状态信息。
Prometheus 使用的是如下图的格式:
引入的第二个依赖 microneter-registry-prometheus 可以将prometheus 转换成如上图的格式。
<cdependency>
<groupId>orgspringfranework.boct</groupId>
<cartifactId>spring-boot-starter-actuator</artifactid>
</dependency>
<dependency>
<groupId>io.nicroneter</groupid>
cartifactId>nicroneter-registry-prometheus</artifactid> eversion>1.1.3</version>
</dependency>
(2) 接着修改 spring boot 配置,默认
resources/applicationyml,没有的话请创建:
server:
port:80803
spring:
application:
nane:spring-demo修改成您的应用名
managenent:
endpoints:
web:
exposure
include:'pronetheus"#&/actuator/prometheus
netrics:
tags:
application:$(spring-application.name)基需的效据中添加application label
(3) 启动应用访问 http://localhost:8080/actuator/prometheus
应该看到一系列数据。
(4) 现在数据已经暴露出来了,我们需要配置 Prometheus 进行采
集,修改 Prometheus 的配置文件
(5) 其中 scrape_configs 是用来采集我们的应用数据的
remotewrite 部分用于将数据写入 Metric Store, 注意替换 basic_auth 中的 username 和 password 为您对应的 accessKeyld 和 accessKeySecret 配置完成后重启 Prometheus,可访问http://${prometheus 域名 }/graph 选择 metric 查看是否采集成功。
接着我们要配置 grafana 进行可视化,首先要把我们的 Metric Store 接入到 Grafana 的数据源中
(6) 单击 Save & Test, 数据源接入成功后,就可以配置 dashbaord
了,我们已经在 qrafana.com 上传了模板:SLS JVM 监控大盘(via MicroMeter) dashboard for Grafana|Grafana Labs 直接在 grafana 中导入即可:做侧边栏选择 +Import 粘贴 url:https://grafana.com/grafana/dashboards/12856 选择上一步创建的数据源点击 Load 这样就配置完成了。