开发者学堂课程【DevOps 日志分析实战 :监控数据分析(二)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/736/detail/13103
监控数据分析(二)
三、数据库监控:数据流
1.MySQL 的监控通过 telegraf 演示:
使用 telegraf 的一个插件去连接 MySQL ,然后去读取 MySQL 的一些性能指标,telegraf 通过 influxdb 的协议将其写给 logtail ,然后 logtail 再写入到 MetricStore ,再通过 SLS Dashboard 做可视化。
演示:
首先需要有 metrics 的 telegraf,然后新建一个配置(自定义数据插件),选择已有的机器组,然后点击下一步,设置配置名称的插件的配置。插件配置如下:
{
“inputs”:{
{
“data1”:{
“Format”:”influx”,
“Address”:”:8476”
},
“type”:”service_http_server”
}
},
“global”:{
“AlwaysOnline”:true,
“DelayStopSec”:500
}
}
该插件的意思是 logtail 会启动一个端口接收 influxdb 的协议写入。
到此配置完成,然后返回可以看到 logtail 下多了一个配置,现在只是 logtail 启动了一个端口,还需要用 telegraf 将数据采集然后写给logtail 。
操作的步骤为:
首先修改 telegraf 的配置,其配置在/etc/ telegraf 下
将默认的文件备份然后移动到另一个文件,然后修改插创建一个新的文件。该文件最重要的部分为:
最后的部分只定义了一个输出(influxdb 协议),只定义了一个 http 的 url ,该 url 就是logtail 的地址。要将 telegraf 装在与 logtail 一台机器上,然后指定127.0.0.1:8476 即可。
然后创建 MySQL 采集的配置,在 telegraf.d 下面新建 mysql.conf。
最重要的是要修改
servers=[“user:passwd@tcp(127.0.0.1:3306)/?tls=false”]
,将其改为对应的连接端串(用户名密码、IP 地址、端口),最后还有一个可选的配置,如下:
可以将其中的数据替换,方便数据查看(例如 IP 地址不是特别直观,可以将其翻译成有含义的名字)
然后重新加载 telegraf 的配置,过一会就可以在页面上看到,选择一条词条点击预览:
该数据库监控可以像主机监控那样配置 spring boot 做可视化,后续会提供一个内置的可视化模板,包括各种各样的中间件也会有一些相应的模板。
从监控对象到 Prometheus 再到 MetrecStore,最后会用 Grafana 做一个可视化。这里用 spring boot 举例,通过 spring boot 提供的功能对其进行应用级别的监控。
2. 通过 spring boot 进行应用级别的监控
应用监控中我们以 Spring Boot 应用为例,从 Spring Boot中,从 MicroMeter 这个组件,使用 Spring Boot Actuator暴露数据,通过 Prometheus采集,并使用 remote write 协议写入MetricStore,再使用 Grafana 对接做可视化,整个数据流如下:
打开一个 spring boot 的 demo 应用,首先要引入两个依赖,其中一个叫 spring-boot-starter-actuator,还有一个叫 micrometer-registry-prometheus 。actuator 实际上是 spring boot 提供的一个标准的监控组件,会暴露应用内部的状态信息。
启动该应用,访问应用的8080端口:
actuator 默认启动了很多接口,例如常用的 health (应用的健康状态),metrics (列出对应的指标)。还可以获取到对应的数值:
但是该结构并不是被 Prometheus 识别的,prometheus 的格式为:
Prometheus 的格式是通过引入的第二个依赖转换的——micrometer-registry-prometheus
因为 spring boot 2.0以上是用 micrometer 做底层的监控框架,所以 micrometer 会封装很多不同的对监控服务封装的格式。
看到 micrometer 官网的描述:
支持很多种包括各种各样的云服务以及一些开源软件,其中也包括 prometheus,支持上图中所表示的协议而暴露其数据。
每种协议都是依赖的形式引进,都会自动的开启。
引入两个依赖后,需要修改 application.yml ,将对应的接口暴露,这里选择将所有接口暴露:
server:
port: 8080
spring:
application:
name: spring-demo
management:
endpoints:
web:
exposure:
include: "*”
//当采集数据时,会附加一个 application 这样的 tag,其值是 //spring-demo
metrics:
tags:
application: ${spring.application.nane}
看到 exposure 的数据:
jvm_memory_used_bytes 是指标,会有一个application 这样的 tag ,其值为 spring-demo ,里面每一个指标都有一个这样的值。这就是通过下面的部分代码实现的,可以有助于在同时监控多个应用时对他们进行区分。
metrics:
tags:
application: ${spring.application.nane}
访问 actuator /Prometheus 能够看到数据,说明现在的配置是可行的。
数据暴露出来后,需要抓取并将其写入到 MetricStore,所以要配置Prometheus。
先在本机安装一个 Prometheus ,然后要增加一个抓取的配置:
-job_name:”spring-demo”
metrics_path:” actuator /Prometheus”
static_configs:
-targets:[“localhost:8080”]
配置完成后还需要配置一个 remote_write(需要让其远程的写入 metric):
remote write:
-url:https://metric-test-proj.cn-beijing.log.aliyuncs.com/prometneus/metric-test-proj/spring/api/v1/write
//配置鉴权(不允许匿名写入)
basic_auth:
//可以单独的创建子账号用来写入
username: $(accessKeyId)
password: $(accessKeySecret)
# Configures the queue used to write to remote storage.
//写入的配置,如果数据量不是很大,下面一段的代码可以忽略
queue config:
max_samples_per send:2048
batch_send deadline: 28s
min backoff:100ms
max backoff: 5s
#max_retries: 10
首先要配置一个 url,url 用在 Grafana 的配置中,metric-test-proj 为 project 的名字,后面的
beijing.log.aliyuncs.com 可以在访问域名中看到:
配置完 remote_write 后,刷新页面,看到下拉框有有指标则说明写入成功。
说明数据已经通过 Prometheus 远程写入到 MetricStore 中,接下来去配置 Grafana 的数据源。
3. 配置 Grafana 的数据源
配置 Grafana 的数据源时,因为是兼容修饰协议的,所以直接配置 Prometheus 数据源即可(url 有 project 的名字等等):
注意一定要打开 Basic auth 这个选项,User 填写 ak 的 id ,password 填写 ak 的密码:
数据源配置完成(名为 spring-demo)
4. 可视化
接下来要做可视化
已经在 grafana.com 上传了一个 dashboard 的模板:
该模板中将常用的指标都已经配置完成,可以直接复制该 id 或者 url ,在配置时点击加号中的 import,然后粘贴,并选择相应的数据源:
点击 import,该 dashboard 即导入成功:
到此,已经完成了整个监控的流程,从 spring boot 暴露出监控指标的数据到 Prometheus 去采集数据,再通过 Prometheus 的remote write 协议写入到 MetricStore ,最后通过 Grafana 去完成其可视化。
5.回顾:
为了更全面的理解,在应用监控还有数据库监控和操作系统监控这三种监控中分别采用了三种不同的方式。在主机监控采用 logtail 采集,然后写入 MetricStore;在数据库监控是用 telegraf 去做采集,然后写入 logtail,通过logtail 写入 MetricStore;在 springboot 监控中,通过spring boot 的 MicroMeter 暴露出来的数据通过 Prometheus 去采集,然后通过其 remote write 协议写入到 MetricStore ,最后通过 Grafana 去完成其可视化。
在实际中可以根据情况,假如有 K8s,则很可能已经有 Prometheus,就可以将其他的进入 Prometheus 继续配置监控;如果已经用了 Grafana 去做一些采集,那么也可以用其他的插件来扩展;如果都没有,logtail 在云上的机器是比较容易安装的,所以也可以利用 logtail 去采集,并且如果使用了 SLS 服务则 logtail 都是已经安装过的。
本身 PromQL 语法和 SQL 语法都提供了很强大的能力,可以在主机监控的 dashboard 中查看一些示例的配置,也可以做一些修改。