- 用 git 管理 Datakit 配置
用 git 管理 Datakit 配置
什么是 Datakit
DataKit 是一款开源、一体式的数据采集 Agent, 它提供全平台操作系统 (Linux/Windows/macOS) 支持, 拥有全面数据采集能力, 涵盖主机、容器、中间件、Tracing、日志以及安全巡检等各种场景。
Datakit 支持使用 git 仓库的方式管理配置, 下面来实践一下。
本次实践用到的 git 地址:
- 网页地址: https://codechina.csdn.net/somebody/public/-/tree/dkconf;
- 仓库地址:
https://codechina.csdn.net/somebody/public.git
;
Git 仓库的目录要求
gitrepos/repo-name/conf.d
用来存放采集器配置文件, 其下的子目录不做限制 (datakit.conf
不在gitrepos
管理范围内);gitrepos/repo-name/pipeline
用来存放 pipeline 脚本, 且只有该目录下第一层的.p
才生效, 其下的子目录均不生效;gitrepos/repo-name/python.d
用来存放 python 脚本;
以下将按这三个目录分成 3 个知识点进行实践。
本机是 Linux, 如果是其它操作系统可能会有些不同, 请根据实际情况适当调整。
实践 conf.d 目录知识点: 观测 nginx 基本信息
第 1 步: 配置 nginx 侧开启 status 功能
- 配置 nginx
/etc/nginx/nginx.conf
:
...
http {
...
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
server{
listen 80;
server_name localhost;
location /nginx_status {
stub_status on;
allow 127.0.0.1;
deny all;
}
}
##
# Gzip Settings
##
gzip on;
...
}
...
- 测试是否生效
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ sudo nginx -s reload
$ curl http://localhost/nginx_status
Active connections: 1
server accepts handled requests
1 1 1
Reading: 0 Writing: 1 Waiting: 0
至此 nginx 侧配置是没啥问题了。
第 2 步: 准备 git 仓库
从 Datakit 配置里面复制一份 nginx 到 git 仓库中:
$ cp /usr/local/datakit/conf.d/nginx/nginx.conf.sample ./conf.d/nginx.conf
nginx.conf
文件内容修改如下:
# {"version": "1.4.19-256-gb42050b2a5", "desc": "do NOT edit this line"}
[[inputs.nginx]]
url = "http://localhost/nginx_status"
# ...
[inputs.nginx.log]
files = ["/var/log/nginx/access.log","/var/log/nginx/error.log"] # 此处打开, 填写 nginx 的 access.log 和 error.log 的全路径
# ...
[inputs.nginx.tags]
# ...
保存并提交 git。
至此 git 仓库的文件结构如下:
$ tree # 查看 git 仓库文件结构
.
├── conf.d
│ └── nginx.conf
第 3 步: 配置 Datakit 侧
- 开启 git 的配置
/usr/local/datakit/conf.d/datakit.conf
:
...
[git_repos]
pull_interval = "5s"
[[git_repos.repo]]
enable = true # 启用
url = "https://codechina.csdn.net/somebody/public.git" # 填仓库地址 (此仓库不需要密码)
branch = "dkconf" # 使用 dkconf 这个分支
...
启动 Datakit: $ Datakit --start
。
第 4 步: 登录观测云官网效果
登录 观测云(https://console.guance.com/), 然后点击左侧功能栏里面的 "日志" --> "查看器", 即可以看到日志了:
为了制造错误日志, 我访问了一个不存在的地址:
curl http://localhost/not_exist
。
实践 pipeline 目录知识点: 自定义 nginx 展示信息
通过编写 Pipeline 脚本, 可以自定义切割出符合要求的结构化日志, 并把切割出来的字段作为标签使用, 通过标签字段, 我们可以快速筛选相关日志、进行关联分析, 帮助我们快速去定位问题并解决问题。
我们这里做个更简单的效果, 就是把字段名 client_ip
改成 client_ip2
。
原来:
第 1 步: 复制 pipeline 文件到 git 仓库中并修改
$ cp /usr/local/datakit/pipeline/nginx.p ./pipeline/nginx.p
用文本编辑器打开 nginx.p
并全文替换 client_ip
为 client_ip2
。
保存并提交 git。
至此 git 仓库的文件结构如下:
$ tree # 查看 git 仓库文件结构
.
├── conf.d
│ ├── nginx.conf
├── pipeline
│ └── nginx.p
第 2 步: 登录观测云官网效果
登录 观测云(https://console.guance.com/), 然后点击左侧功能栏里面的 "日志" --> "查看器", 点击最新的一条日志, 可以看到已经生效了:
效果有一定延迟, 大概 2 分钟左右可以看到效果。
实践 python.d 目录知识点: 手写 Python 脚本汇报业务数据
pythond
是定时触发用户自定义 Python 采集脚本的一整套方案。在实际业务中, 你可以把想报的业务数据上报, 比方说过去一小时网站的新用户注册数等等。
我们这里做个简单的效果, 就是报随机数给观测云。
第 1 步: 编写 Python 脚本
这个脚本实现的功能很简单, 生成一个随机数, 然后调用 Datakit 的 Python SDK 上报给观测云:
hellopythond.py
:
from datakit_framework import DataKitFramework
import random
class HelloPythond(DataKitFramework):
__name = 'HelloPythond'
interval = 10 # 每 10 秒钟采集上报一次。这个根据实际业务进行调节, 这里仅作演示。
# if your datakit ip is 127.0.0.1 and port is 9529, you won't need use this,
# just comment it.
# def __init__(self, **kwargs):
# super().__init__(ip = '127.0.0.1', port = 9529)
def run(self):
rd = random.randint(1, 100) # 生成一个 1 到 100 之间的随机数
data = [
{
"measurement": "random_number", # 指标名称。
"tags": {
"tag_name": "tag_value", # 自定义 tag, 根据自己想要标记的填写, 我这里是随便写的
},
"fields": {
"number": rd, # 指标, 这里是随机数
},
},
]
in_data = {
'M':data,
'input': "pyfromgit"
}
return self.report(in_data) # you must call self.report here
这个文件存放在 [git 仓库目录]/python.d/hellopythond/hellopythond.py
下。
注意
.py
文件的上层还有一个模块名
的文件夹。这里的是hellopythond
, 即文件结构为hellopythond\hellopythond.py
。我第一次在这里采坑了, 排查了好久。这样设计的原因我想是为了方便源代码分为多个文件存放。
保存并提交 git。
至此 git 仓库的文件结构如下:
$ tree # 查看 git 仓库文件结构
.
├── conf.d
│ ├── nginx.conf
├── pipeline
│ └── nginx.p
├── python.d
│ └── hellopythond
│ └── hellopythond.py
第 2 步: 配置 Datakit 侧
$ cp /usr/local/datakit/conf.d/pythond/pythond.conf.sample ./conf.d/pythond.conf
用文本编辑器编辑该文件。
pythond.conf
:
# {"version": "1.4.19-256-gb42050b2a5", "desc": "do NOT edit this line"}
[[inputs.pythond]]
# Python 采集器名称
name = 'pyfromgit' # required
# 运行 Python 采集器所需的环境变量
#envs = ['LD_LIBRARY_PATH=/path/to/lib:$LD_LIBRARY_PATH',]
# Python 采集器可执行程序路径(尽可能写绝对路径)
cmd = "python3" # required. python3 is recommended.
# 用户脚本的相对路径(填写文件夹, 填好后该文件夹下一级目录的模块和 py 文件都将得到应用)
dirs = ["hellopythond"] # 这里填的是文件夹名, 即类名
保存并提交 git。
至此 git 部分已配置完毕, 目前的文件结构为:
$ tree
.
├── conf.d
│ ├── nginx.conf
│ └── pythond.conf
├── pipeline
│ └── nginx.p
├── python.d
│ └── hellopythond
│ └── hellopythond.py
第 3 步: 登录观测云官网效果
登录 观测云(https://console.guance.com/), 然后点击左侧功能栏里面的 "指标" --> "指标分析", 然后在 "指标" 的下拉框里面选择指标名(这里是 random_number
), 就可以看到已经生效了:
使用感受
总的来说, 可以对我目前的一些项目进行观测, 完全够用, 关键还免费。
不过它网站上功能有些太多了, 待我一一体验后再来这里写笔记。
FAQ
Datakit 与观测云的关系
观测云是一套可观测性解决方案的网站。而 Datakit 是其客户机的采集器软件, 需要运行在客户测采集数据, 然后将这些数据上报给观测云进行展示或者告警(短信告警要收费)。
pythond 与 python.d 的关系
pythond
是 Datakit 一个采集器的名字。python.d
是 git 仓库目录下的一个文件夹, 是存放 python 脚本的目录。