文章目录

  • 一、背景信息
  • 二、操作步骤
  • 方法一:通过http api接口
  • 方法二:使用grafana provisioning通过配置方式
  • 总结:整理不易,如果对你有帮助,可否点赞关注一下?





一、背景信息

由于业务性质原因,我们需要将业务系统部署在多个客户本地机房,由于客户没有一个统一的监控系统,所以我们需要在客户机房部署监控系统,主要监控主机、接口、端口等方面。

针对业务系统部署及维护场景,我们开发了运维工具,主要包括前期部署、后期维护两大核心要点,监控作为部署环节比较重要的一项指标,所以我们需要将这些监控模块融合到运维工具中,这里的监控系统组件包括:node-exporter+blackbox-exporter+alertmanager+prometheus+grafana。

grafana作为监控组件中比较重要的一个模块,要想实现自动化部署其实是很简单,除了部署完之后还有很多其它操作,比如添加数据源、导入监控模板,这些需要人工手动来操作。如果这些无法实现自动化的话,那么你这个运维工具就很难称得上是自动化工具。

这里就着重介绍一下如何通过自动化的方式来添加datasource和dashboard?


二、操作步骤

方法一:通过http api接口

Grafana http_api

1、创建API令牌

[root@host-sdjw-ansible-client-191 ~]# curl -X POST -H "Content-Type: application/json" -d '{"name":"apikeycurl", "role": "Admin"}' http://lolaage:ZDSstvk1QFWEVOn9@localhost:3000/api/auth/keys
{"id":1,"name":"apikeycurl","key":"eyJrIjoiRVhoREdHR2VFUHNQZ2pvaXd4Z3lac1FpR2NQM2xYRVoiLCJuIjoiYXBpa2V5Y3VybCIsImlkIjoxfQ=="}

说明:将此处返回的密钥保存在您的密码管理器中,因为将来无法再次获取它。

grafana重启后模板没有数据了 grafana新建dashboard_python


2、创建数据源,这里里prometheus为例

说明:如果你第一次不知道怎么写,建议你可以在grafana页面上手动添加一个prometheus数据源,通过接口按名称获取单个数据源

grafana重启后模板没有数据了 grafana新建dashboard_自动化_02

[root@host-sdjw-ansible-client-191 ~]# curl  -H "Authorization: Bearer eyJrIjoiRVhoREdHR2VFUHNQZ2pvaXd4Z3lac1FpR2NQM2xYRVoiLCJuIjoiYXBpa2V5Y3VybCIsImlkIjoxfQ=="  http://localhost:3000/api/datasources/name/Prometheus

如下图所示:

grafana重启后模板没有数据了 grafana新建dashboard_自动化_03


返回值如下所示:

{"id":1,"orgId":1,"name":"Prometheus","type":"prometheus","typeLogoUrl":"","access":"proxy","url":"http://192.168.1.191:9090","password":"","user":"","database":"","basicAuth":false,"basicAuthUser":"","basicAuthPassword":"","withCredentials":false,"isDefault":false,"jsonData":{},"secureJsonFields":{},"version":1,"readOnly":true}

说明:上述的返回值,其实就是我们需要创建数据源的核心内容,其实创建prometheus数据源只需要填写几项核心要点就行,当然你也可以将返回结果进行复制,只需将id值和name值进行修改,然后参考如下所示进行执行

[root@host-sdjw-ansible-client-191 ~]#  curl -X POST -H "Content-Type: application/json" -d '{"name":"Prometheus-node","type":"prometheus","url":"http://192.168.1.191:9090","access":"proxy","basicAuth":false}' "http://lolaage:ZDSstvk1QFWEVOn9@127.0.0.1:3000/api/datasources"
或者
[root@host-sdjw-ansible-client-191 ~]#  curl -X POST -H "Content-Type: application/json" -d '{"id":2,"orgId":1,"name":"Prometheus-node","type":"prometheus","typeLogoUrl":"","access":"proxy","url":"http://192.168.1.191:9090","password":"","user":"","database":"","basicAuth":false,"basicAuthUser":"","basicAuthPassword":"","withCredentials":false,"isDefault":false,"jsonData":{},"secureJsonFields":{},"version":1,"readOnly":true}' "http://lolaage:ZDSstvk1QFWEVOn9@127.0.0.1:3000/api/datasources"

执行命令后,可通过页面方式查看数据源是否添加成功

grafana重启后模板没有数据了 grafana新建dashboard_自动化_04


3、创建dashboard

说明:首先在grafana中通过json model来导出我们的dashboard(带有variable),如下所示:

[root@host-sdjw-ansible-client-191 ~]# curl -H "Content-Type: application/json" -X POST -d @/root/node.json "http://lolaage:ZDSstvk1QFWEVOn9@127.0.0.1:3000/api/dashboards/db"

方法二:使用grafana provisioning通过配置方式

说明:grafana provisioning是grafana 5.0后引入的功能,用以支持通过配置的方式进行datasource和dashboard的配置。

1、开启grafana provisioning

说明:要开启该功能,首先要在grafana的配置中增加provisioning的选项,即在grafana.ini中增加如下内容,如下图所示:

grafana重启后模板没有数据了 grafana新建dashboard_python_05

2、在/etc/grafana/provisioning中增加dashboards和datasources文件夹

grafana重启后模板没有数据了 grafana新建dashboard_json_06

3、添加datasources数据源

说明:datasource只支持静态配置,即在datasources中配置好后,grafana启动时候将会进行加载。在grafana启动后在加入该文件夹,需要重启grafana才能生效。在下面内容中,可以看到yaml文件内容分三部分,第一部分apiVersion是固定的;第二部分deleteDatasources是启动时候将会首先从数据库中删除已有的datasource的名称;第三部分datasources是一个列表,用以表示不同的datasource及相关属性信息。

示例一:datasoures文件夹下需要放置对应的datasource的yaml文件,这里以添加prometheus数据源为例,文件名称为prometheus.yaml,如下所示:

bash-5.0$ cat prometheus.yml 
apiVersion: 1
deleteDatasources:
 - name: Prometheus
   orgId: 1
datasources:
 - id: 1
   orgId: 1
   name: Prometheus
   type: prometheus
   typeLogoUrl: ''
   access: proxy
   url: http://192.168.1.191:9090
   password: ''
   user: ''
   database: ''
   basicAuth: false
   basicAuthUser: ''
   basicAuthPassword: ''
   withCredentials: false
   isDefault: false
   jsonData: {}
   secureJsonFields: {}
   version: 2
   readOnly: false

示例二:datasoures文件夹下需要放置对应的datasource的yaml文件,这里以添加loki数据源为例,文件名称为loki.yaml,如下所示:

bash-5.0$ cat loki.yml 
apiVersion: 1
deleteDatasources:
 - name: Loki
   orgId: 1
datasources:
 - id: 2
   orgId: 1
   name: Loki
   type: loki
   typeLogoUrl: ''
   access: proxy
   url: http://192.168.1.191:3100
   password: ''
   user: ''
   database: ''
   basicAuth: false
   basicAuthUser: ''
   basicAuthPassword: ''
   withCredentials: false
   isDefault: false
   jsonData: {}
   secureJsonFields: {}
   version: 2
   readOnly: false

当然,很多人不会写这个yaml文件,其实很简单,你可以手动在grafana页面上创建一个datasource,然后通过接口查看这个数据源的相关信息,在第一种方法中有介绍操作,你可以进行参考。

4、添加dashboard
说明:不同于datasource,dashboards是支持动态加载的

bash-5.0$ cat prometheus.yml 
apiVersion: 1
providers:
 - name: 'default'
   orgId: 1
   folder: ''
   type: file
   updateIntervalSeconds: 10
   options:
     path: /tmp/grafana  #存放dashborad文件目录

bash-5.0$ cd /tmp/grafana/
bash-5.0$ ls
http-exporter.json   node1-exporter.json  port-exporter.json

总结:解决了这些问题,自动化部署才可以进行下去,下面就是看你自己运用ansible的能力,通过ansible来实现业务系统+监控系统+日志系统的一键部署。