influxdb创建数据库
create database devops
连接grafana
Nginx配置
nginx编译参数需有--with-http_stub_status_module
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-stream --with-stream_ssl_module --with-http_stub_status_module
nginx配置新增,增完后reload nginx
location /nginx_status {
stub_status on;
access_log off;
allow all;
}
[root@Grafana ~]# curl http://localhost/nginx_status
Active connections: 1
server accepts handled requests
1 1 1
Reading: 0 Writing: 1 Waiting: 0
Active connections: 活跃连接数,这个数字表示当前时间点,Nginx 正在处理的活跃连接总数。
server accepts handled requests:
第一个数字(1)表示 Nginx 自启动以来接收的连接总数。
第二个数字(1)表示 Nginx 自启动以来成功创建的握手总数。
第三个数字(1)表示自启动以来处理的请求总数。
Reading: 当前正在读取客户端请求头的连接数。
Writing: 当前正在向客户端发送响应的连接数。
Waiting: 开启 keep-alive 的情况下,等待下一次请求指令的闲置连接数。
from influxdb import InfluxDBClient
import urllib.request
# Nginx 状态 URL - 这是 Nginx 服务器状态页面的 URL,用于获取实时的服务器状态数据
url = 'http://192.168.124.10/nginx_status'
try:
# 尝试从 Nginx 状态页面获取数据
response = urllib.request.urlopen(url)
# 读取响应内容,并解码为 UTF-8 格式的字符串,这是为了处理可能的中文或特殊字符
result = response.read().decode('utf-8')
# 将结果按行分割成列表,每行一个元素
list_result = result.split('\n')
# 解析第三行(通常包含连接数、处理数、请求数),并按空格分割
nginx_result = list_result[2].split()
# 连接到 InfluxDB - 使用 InfluxDBClient 连接到 InfluxDB 服务器
client = InfluxDBClient(host='192.168.124.10', port=8086, username='test', password='123456', database='devops')
# 构造数据点列表 - 准备发送到 InfluxDB 的数据点,包括测量名称、标签和字段
data_list = [
{'measurement': 'nginx_status', 'tags': {'item': 'nginx.accepts'}, 'fields': {'value': int(nginx_result[0])}},
{'measurement': 'nginx_status', 'tags': {'item': 'nginx.handled'}, 'fields': {'value': int(nginx_result[1])}},
{'measurement': 'nginx_status', 'tags': {'item': 'nginx.requests'}, 'fields': {'value': int(nginx_result[2])}}
]
# 将数据点写入到 InfluxDB - 使用 write_points 方法将准备好的数据发送到数据库
client.write_points(data_list)
except Exception as e:
# 如果在尝试过程中发生任何异常,打印错误信息
print(f"An error occurred: {e}")
查看influxdb信息
> select * from nginx_status
name: nginx_status
time item value
---- ---- -----
1722389857220933139 nginx.accepts 7
1722389857220933139 nginx.handled 7
1722389857220933139 nginx.requests 7
>
可以将上面的脚本加入定时任务
在下方选择nginx_accepts,图表选择默认的time series,会自动绘制折线图