文章目录
- 一、背景信息
- 二、操作步骤
- 方法一:通过http api接口
- 方法二:使用grafana provisioning通过配置方式
- 总结:整理不易,如果对你有帮助,可否点赞关注一下?
一、背景信息
由于业务性质原因,我们需要将业务系统部署在多个客户本地机房,由于客户没有一个统一的监控系统,所以我们需要在客户机房部署监控系统,主要监控主机、接口、端口等方面。
针对业务系统部署及维护场景,我们开发了运维工具,主要包括前期部署、后期维护两大核心要点,监控作为部署环节比较重要的一项指标,所以我们需要将这些监控模块融合到运维工具中,这里的监控系统组件包括:node-exporter+blackbox-exporter+alertmanager+prometheus+grafana。
grafana作为监控组件中比较重要的一个模块,要想实现自动化部署其实是很简单,除了部署完之后还有很多其它操作,比如添加数据源、导入监控模板,这些需要人工手动来操作。如果这些无法实现自动化的话,那么你这个运维工具就很难称得上是自动化工具。
这里就着重介绍一下如何通过自动化的方式来添加datasource和dashboard?
二、操作步骤
方法一:通过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=="}
说明:将此处返回的密钥保存在您的密码管理器中,因为将来无法再次获取它。
2、创建数据源,这里里prometheus为例
说明:如果你第一次不知道怎么写,建议你可以在grafana页面上手动添加一个prometheus数据源,通过接口按名称获取单个数据源
[root@host-sdjw-ansible-client-191 ~]# curl -H "Authorization: Bearer eyJrIjoiRVhoREdHR2VFUHNQZ2pvaXd4Z3lac1FpR2NQM2xYRVoiLCJuIjoiYXBpa2V5Y3VybCIsImlkIjoxfQ==" http://localhost:3000/api/datasources/name/Prometheus
如下图所示:
返回值如下所示:
{"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"
执行命令后,可通过页面方式查看数据源是否添加成功
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中增加如下内容,如下图所示:
2、在/etc/grafana/provisioning中增加dashboards和datasources文件夹
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来实现业务系统+监控系统+日志系统的一键部署。