grafana

八、grafana的应用

Grafana 是一个开源的可视化平台,支持多种数据源,方便易用。更多的不再赘述,用起来就明白了。 以下是官网对Grafana的定义。官网地址:https://grafana.com/

Grafana is the open source analytics and monitoring solution for every database

8.1 grafana的安装

--1. 下载
wget http://doc.yihongyeyan.com/qf/project/soft/grafana/grafana-6.7.3.linux-amd64.tar.gz
--2. 解压并更名
tar -zxvf grafana-6.7.3.linux-amd64.tar.gz -C /usr/local
[root@qianfeng01 local]# mv grafana-6.7.3/ grafana
--3. 复制一份配置文件
cp /usr/local/grafana/conf/sample.ini /usr/local/grafana/conf/grafana.ini
--4. 启动:注意,是前台线程
/usr/local/grafana/bin/grafana-server -config conf/grafana.ini

经过上述步骤,grafana已经启动,我们可以通过默认配置的3000端口访问grafan了

# 在浏览器中,输入自己ip地址:3000 就可以看到grafna 页面了 
# 默认的用户名和密码都是: admin 
# 输入用户名密码后,grafan会让你修改你的密码,自己修改一个即可,点击保存后,就可以看到如下界面,至此Grafana已经成功启动,

在这里插入图片描述

8.2 supervisor管理grafana

; grafana.conf 启动配置文件
[program:grafana] ; 我们的应用配置格式为 program:我们应用名称(自己定义)
directory=/usr/local/grafana/ ; 运行程序前会切换到配置的目录中
command=sh -c "bin/grafana-server -config conf/grafana.ini" ; 我们要执行的命令
stderr_logfile=/var/log/supervisor/grafana.err ;错误日志文件
stdout_logfile=/var/log/supervisor/grafana.log ;标准输出日志文件,通过该文件查看grafana运行日志
stdout_logfile_maxbytes=10MB ; 标准输出日志文件多大滚动一次
stdout_logfile_backups=10 ; 标准输出日志文件最多备份多少个
user=root ; 以什么用户启动
autostart=true ; 是否在supervisord启动时,直接就启动应用
autorestart=true ; crash 后是否自动重启
startsecs=10 ;应用进程启动多少秒之后,此时状态如果是running状态,就认为是成功
startretries=3 ; 当进程启动失败后,最大尝试启动的次数, 如果超过指定次数,应用会被标记为 Fail状态
stopasgroup=true ; 是否停止由应用本身创建的子进程,此选项接受的停止信号是stop信号
killasgroup=true ; 是否停止由应用本身创建的子进程,此选项接受的停止信号是SIGKILL信号
redirect_stderr=false ; 如果是true,stderr的日志会被写入stdout日志文件中

启动进程

# 读取配置文件 
supervisorctl reread 
# 更新启动Prometheus 
supervisorctl update grafana
# 查看启动状态,如果一切ok,将看到如下图信息 
supervisorctl status grafana
# 如果想停止grafana 
supervisorctl stop grafana
# 如果想再次启动 
supervisorctl start grafana
# 注意一旦你修改了配置文件内容,一定要先reread,然后update 就可以了

8.3 grafana添加prometheus源

1)登录prometheus,选择Add datasource

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Od7sIg5I-1600484613455)(采集和监控项目.assets/01_2.png)]

2) 会出现以下界面,然后选择Prometheus数据源

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zeyDow62-1600484613458)(采集和监控项目.assets/01_3.png)]

3)然后来到此页面,添加prometheus的地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-acw1KnGZ-1600484613462)(采集和监控项目.assets/01_4.png)]

至此Prometheus数据源已经成功添加, 点击Save&Test或Back返回即可

九、指标监控

9.1 监控Nginx QPS

经过上述Prometheus,Grafana的成功部署,我们接下来就开始使用我们他们,对我我们的采集流程进行监控。我们之前说过,本项目我们监控两个组件。第一,Nginx数据采集接口的请求监控第二, Flume的Channel的相关监控。此小节我们讲解Nginx数据采集监控

**1)**采集接口要监控的指标

--1. 数据采集接口的实时 QPS 
--2. 数据采集接口的各个状态码下的 QPS 
--3. 数据采集接口的 P99 延时

**2)**安装Nginx_lua_prometheus

--# 下载 
wget http://doc.yihongyeyan.com/qf/project/soft/prometheus/nginx-lua-prometheus.tgz

--# 解压到prometheus的家里
tar -xvzf nginx-lua-prometheus.tgz -C /usr/local/prometheus && rm -rf nginx-lua-prometheus.tgz

**3)**修改main-nginx.conf添加nginx lua 库

修改采集项目的主配置文件main-nginx.conf,将以下语句添加到配置文件中的http模块中

lua_package_path "/usr/local/prometheus/nginx-lua-prometheus/?.lua;;";

**4)**编写nginx metric采集接口配置

在 /opt/apps/collect-app/conf/vhost下, 维护配置文件metric.conf

[root@qianfeng01 vhost]# vim metric.conf
# metric.conf
lua_shared_dict prometheus_metrics 10M;
init_by_lua_block {
    -- 初始化Prometheus
    prometheus = require("prometheus").init("prometheus_metrics")
    -- 定义一个counter类型metric,记录http请求个数,metric的标签为主机 端口 请求路径 请求转态码
    http_requests_endpoint = prometheus:counter("nginx_http_requests_endpoint", "Number of HTTP requests_endpoint",{"host","port","endpoint", "status"})
    -- 定义一个histogram类型的metric,记录http 请求时间,metric 标签依然为 主机 端口 请求路径 请求转态码
    -- 这里我们使用默认的 5ms-10s 之间的20个bucket来记录请求时间分布
    http_request_time = prometheus:histogram("nginx_http_request_time","HTTP request time",{"host","port","endpoint", "status"})
    -- 定义一个gauge类型metric,记录nginx的连接数,标签为nginx的连接状态
    http_connections = prometheus:gauge("nginx_http_connections","Number of HTTP connections", {"state"})
}

init_worker_by_lua 'prometheus:init_worker()';
log_by_lua_block {
-- 请求的主机名
local host = ngx.var.host
-- 请求的url路径
local endpoint = ngx.var.uri
-- 状态码
local status = ngx.var.status
-- 端口号
local port = ngx.var.server_port
-- 如果请求是一些静态文件,则统一归并为一类
if string.find(endpoint, "static") ~= nil or string.find(endpoint, ".js") ~= nil or string.find(endpoint, ".css") ~= nil or
string.find(endpoint, ".jpg") ~= nil or string.find(endpoint, ".html") ~= nil or string.find(endpoint, ".ico") ~= nil then
    endpoint = "static"
    status = "static"
else
        endpoint = ngx.var.uri
end

-- 请求数的 metric
if endpoint ~= nil then
        http_requests_endpoint:inc(1, {host,port,endpoint,status})
end

local request_time = ngx.var.request_time

-- 请求时间的 metric
if endpoint ~= nil and request_time~= nil then
        http_request_time:observe(tonumber(request_time), {host,port,endpoint,status})
end
}

server {
listen 9527;

    # 暴露metrics 接口给Prometheus
    location /metrics {
        content_by_lua_block {
        -- nginx 连接状态
        if ngx.var.connections_active ~= nil then
            http_connections:set(ngx.var.connections_active, {"active"})
            http_connections:set(ngx.var.connections_reading,  {"reading"})
            http_connections:set(ngx.var.connections_waiting, {"waiting"})
            http_connections:set(ngx.var.connections_writing, {"writing"})
        end

        prometheus:collect()
        }
    }
}

**5)**加载metric接口配置

# 只需要测试主配置文件即可
openresty -p /opt/apps/collect-app/ -c conf/main-nginx.conf -t
# 如果一切OK,执行加载配置命令. 之前采集的服务我们已经启动nginx,如果未启动请先启动nginx
openresty -p /opt/apps/collect-app/ -c conf/main-nginx.conf  -s  reload

验证一下,执行如下命令请求我们配置好metrics接口,会看到类似如下metric信息,表示OK

curl localhost:9527/metrics 

**6)**metric接口配置到Prometheus

修改prometheus家里的配置文件prometheus.yml, 因为之前有默认配置文件,我们覆盖即可

vim /usr/local/prometheus/pormetheus.yml
# filename : prometheus.yml
# 全局配置
global:
  scrape_interval:     15s # 设置每15秒pull一次数据,默认是1min
# 每一个job的配置,
scrape_configs:
 # 默认的metric路径是 '/metrics'
 # scheme defaults to 'http'.
 # Prometheus 自己的metric
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']
  - job_name: 'collect-app-nginx'
    scrape_interval: 5s
    static_configs:
    - targets: ['localhost:9527']

执行如下命令,热加载Prometheus 配置

curl -X POST  http://localhost:9090/-/reload

**7)**在Grafana上展示我们配置的数据指标

# 这里将我们需要的数据指标已经做成了Grafna支持的JSON配置文件,你只需要下载后,导入到Grafna就可以了
# 下载Json配置,然后传到windows上
wget http://doc.yihongyeyan.com/qf/project/collect-monitor/config/collect-app-nginx.json
# 登录到Grafana,按图示操作

在这里插入图片描述

点击upload ,将下载的json文件,上传即可,上传之后即可在面板中看到如下结果

至此Nginx采集的监控我们就已经完毕了,同时Grafana是原始支持Dingding报警的,这个就留给大家自己去探索配置了。

9.2 监控Flume Metric

**1)**首先我们思考我们关注的Flume Metric信息

--1. channel的填充量
--2. sink的发送速率

**2)**我们先通过Supervisor管理启动Flume Agent的脚本

--注意:行为数据的flume采集方案前台线程管理已经完成,回顾文档的6.5.2小节

这里添加内容数据的采集方案前台线程管理

[root@qianfeng01 ~]# vim  /etc/supervisord.d/agent-b1001.conf
; 行为数据采集方案的 启动配置文件
[program:agent-b1001] ; 我们的应用配置格式为 program:我们应用名称(自己定义)
command=/opt/apps/collect-app/scripts/collect-app-http-flume-start.sh
stderr_logfile=/var/log/supervisor/agent-b1001.err ;错误日志文件
stdout_logfile=/var/log/supervisor/agent-b1001.log ;标准输出日志文件,我们通过该文件查看Prometheus运行日志

stdout_logfile_maxbytes=10MB ; 标准输出日志文件多大滚动一次
stdout_logfile_backups=10 ; 标准输出日志文件最多备份多少个
user=root ; 以什么用户启动
autostart=true ; 是否在supervisord启动时,直接就启动应用
autorestart=true ; crash 后是否自动重启
startsecs=10 ;应用进程启动多少秒之后,此时状态如果是running状态,就认为是成功
startretries=3 ; 当进程启动失败后,最大尝试启动的次数, 如果超过指定次数,应用会被标记为Fail状态
stopasgroup=true ; 是否停止由应用本身创建的子进程,此选项接受的停止信号是stop信号
killasgroup=true ; 是否停止由应用本身创建的子进程,此选项接受的停止信号是SIGKILL信号
redirect_stderr=false ; 如果是true,stderr的日志会被写入stdout日志文件中
# 读取新的配置
supervisorctl reread
# 更新启动agent
supervisorctl update agent-b1001
# 查看启动状态
supervisorctl status
# 如果一切OK,你会找到如下信息

3) 然后使用supervisor管理内容数据的网络穿透前台进程

修改配置文件

[root@qianfeng01 scripts]# vim /etc/supervisord.d/article-frpc.conf

注意,下面的--sd 和 -u的值换成你自己的
; 行为数据的网络穿透启动配置文件
[program:article-frpc] ; 我们的应用配置格式为 program:我们应用名称(自己定义)
command=/usr/local/frp/frpc http --sd michael1-article -l 9666 -u michael1

stderr_logfile=/var/log/supervisor/article-frpc.err ;错误日志文件
stdout_logfile=/var/log/supervisor/article-frpc.log ;标准输出日志文件,我们通过该文件查看Prometheus运行日志

stdout_logfile_maxbytes=10MB ; 标准输出日志文件多大滚动一次
stdout_logfile_backups=10 ; 标准输出日志文件最多备份多少个
user=root ; 以什么用户启动
autostart=true ; 是否在supervisord启动时,直接就启动应用
autorestart=true ; crash 后是否自动重启
startsecs=10 ;应用进程启动多少秒之后,此时状态如果是running状态,就认为是成功
startretries=3 ; 当进程启动失败后,最大尝试启动的次数, 如果超过指定次数,应用会被标记为Fail状态
stopasgroup=true ; 是否停止由应用本身创建的子进程,此选项接受的停止信号是stop信号
killasgroup=true ; 是否停止由应用本身创建的子进程,此选项接受的停止信号是SIGKILL信号
redirect_stderr=false ; 如果是true,stderr的日志会被写入stdout日志文件中

启动进程

# 读取配置文件 
supervisorctl reread 
# 更新启动Prometheus 
supervisorctl update article-frpc
# 查看启动状态
supervisorctl status article-frpc
# 如果想停止grafana 
supervisorctl stop article-frpc
# 如果想再次启动 
supervisorctl start article-frpc
# 注意一旦你修改了配置文件内容,一定要先reread,然后 update 就可以了

**4)**使用插件flume_exporter收集数据

我们通过flume_exporter这个插件, 来通过flume的http metric接口进行收集数据,从而转为Prometheus需要的数据格式并提供Api供prometheus pull数据. 这里有两点注意

1. flume提供的http metric,就是我们启动agent时,配置的监听端口,即-Dflume.monitoring.port的值,比如31001和31002

2. 我们通过直接使用开源的flume expoter,源码查看https://github.com/woozhijun/flume_exporter

注意:这里直接下载我们编译好的使用即可
# 下载配置 flume_exporter
mkdir -p /usr/local/flume-exporter && cd /usr/local/flume-exporter
wget http://doc.yihongyeyan.com/qf/project/soft/flume-exporter/flume_exporter
wget http://doc.yihongyeyan.com/qf/project/soft/flume-exporter/config.yaml
wget http://doc.yihongyeyan.com/qf/project/soft/flume-exporter/metrics.yaml
#修改权限
chmod u+x flume_exporter

查看config.yaml文件,可知配置了flume的监控指标接口31001和31002

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jzKgVpet-1600485192275)(%E9%87%87%E9%9B%86%E5%92%8C%E7%9B%91%E6%8E%A7%E9%A1%B9%E7%9B%AE.assets/image-20200918165118951.png)]

使用supervisor来管理flume_exporter这个前台进程

[root@qianfeng01 ~]# vim /etc/supervisord.d/flume-exporter.conf
; flume-exporter 配置
[program:flume-exporter] ; 我们的应用配置格式为 program:我们应用名称(自己定义)
directory=/usr/local/flume-exporter ; 运行程序前会切换到配置的目录中
command=sh -c "./flume_exporter --config-file='config.yaml' --metric-file='metrics.yaml' --log-level='debug'" ; 我们要执行的命令
stderr_logfile=/var/log/supervisor/flume-exporter.err   ;错误日志文件
stdout_logfile=/var/log/supervisor/flume-exporter.log ;标准输出日志文件,我们通过该文件查看agent运行日志
stdout_logfile_maxbytes=10MB  ; 标准输出日志文件多大滚动一次
stdout_logfile_backups=10 ; 标准输出日志文件最多备份多少个
user=root       ; 以什么用户启动
autostart=true ; 是否在supervisord启动时,直接就启动应用
autorestart=true ; crash 后是否自动重启
startsecs=10    ;应用进程启动多少秒之后,此时状态如果是running状态,就认为是成功
startretries=3 ; 当进程启动失败后,最大尝试启动的次数, 如果超过指定次数,应用会被标记为Fail状态
stopasgroup=true ; 是否停止由应用本身创建的子进程,此选项接受的停止信号是stop信号
killasgroup=true ; 是否停止由应用本身创建的子进程,此选项接受的停止信号是SIGKILL信号
redirect_stderr=true ; 如果是true,stderr的日志会被写入stdout日志文件中

启动flume-exporter

[root@qianfeng01 ~]# supervisorctl reread 
[root@qianfeng01 ~]# supervisorctl udpate flume-exporter
[root@qianfeng01 ~]# supervisorctl status

注意:自身提供http://0.0.0.0:9360/metrics 接口,供Prometheus Pull数据

**5)**配置lume-exproter 接口配置到Prometheus

将flume-exproter接口配置到Prometheus,这个之前已经给大家列出了Prometheus的配置文件,只需要在添加一个job即可

# 在 /opt/soft/prometheus/prom/prometheus.yml 配置文件中添加如下job,注意yaml格式
  - job_name: 'flume-exporter'
    scrape_interval: 5s
    static_configs:
    - targets: ['localhost:9360']
# 执行如下命令,热加载Prometheus 配置
curl -X POST  http://localhost:9090/-/reload

**6)**在Grafana上配置flume metric 监控

这次我们直接使用Grafana提供的第三方Dashboard ID即可dashboard 链接 ,从连接中我们可知,此ID是 10736 我们直接导入这个ID到Grafana

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BgAJhcec-1600485192279)(%E9%87%87%E9%9B%86%E5%92%8C%E7%9B%91%E6%8E%A7%E9%A1%B9%E7%9B%AE.assets/2020-05-11-161901.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iSmkB7QS-1600485192280)(%E9%87%87%E9%9B%86%E5%92%8C%E7%9B%91%E6%8E%A7%E9%A1%B9%E7%9B%AE.assets/2020-05-11-162018.png)]

点击import后,如果flume agent此时有数据投递,你会看到如图结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q0cF7wL1-1600485192282)(%E9%87%87%E9%9B%86%E5%92%8C%E7%9B%91%E6%8E%A7%E9%A1%B9%E7%9B%AE.assets/2020-05-21-094518.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LBWyP4RU-1600485192283)(%E9%87%87%E9%9B%86%E5%92%8C%E7%9B%91%E6%8E%A7%E9%A1%B9%E7%9B%AE.assets/2020-05-12-091212.png)]

至此我们的监控就部署完毕

9.3 报警说明

我们的之前说过对于报警,Grafana本身就支持Dingding等多种接口,可以在Grafana上直接配置触发到条件直接发送报警消息,但是我们一般并不直接这样做,通常我们会封装一个数据报警的模块,用来汇集业务中的各种组件报警信息,再友报警组件本身发送消息到Dingding或者其他IM。 同时我们的报警组件提供WebHook出来,解析各类开源组件的消息,比如Grafana也是支持配置WebHook的. 这样做的目的是更为灵活方便的管理报警信息。本项目中不再开发报警中间件,你了解是如何做的即可. 下图我展示了一个钉钉接受到Grafna实时报警的情形

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ld1Ps7V2-1600485192285)(%E9%87%87%E9%9B%86%E5%92%8C%E7%9B%91%E6%8E%A7%E9%A1%B9%E7%9B%AE.assets/2020-05-12-094119.png)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值