看一下效果图:
InfulxDb
官方网站:https://portal.influxdata.com/downloads/
docker
docker pull influxdb
安装influxdb数据库
docker pull quay.io/influxdb/chronograf:1.8.4
chronograf可视化工具(非必要,只是可以web访问,类似PHPMySQL)
docker run -d -p 8086:8086 -v /var/lib/influxdb:/var/lib/influxdb --name influxdb influxdb
启动influxdb,其中-v参数表示将docker内的文件夹映射到本地,冒号前为本地路径,冒号后为docker内路径。-p表示映射端口,建议不使用默认的8086端口,比如-p 2222:8086
。
Windows
chronograf Windows可执行文件下载地址
influxdb Windows可执行文件下载地址
Windows运行很简单:influxd.exe -config influxdb.conf(注意不是少打了一个b)
当然运行之前可以修改influxdb.conf配置文件,主要修改字段:
bind-address = "0.0.0.0:8088"
[meta]
dir = "G:/Grafana/influxdb/meta"
[data]
dir = "G:/Grafana/influxdb/data"
wal-dir = "G:/Grafana/influxdb/wal"
[http]
auth-enabled = true # 开启http密码验证
不过linux还是建议docker安装,Windows可以选择可执行文件,也可以docker,就看你是不是Windows10专业版了(因为Windows10专业版安装docker很简单)。
创建管理员用户
启动influxdb后,运行influxdb
(windows先在cmd下cd到下载的influx.exe所在目录然后输入influx.exe)命令,输入一下命令即可
create user admin with password ‘admin’ with all privileges
注意修改admin账号和密码两个的值, 如果不是管理员无法操作数据库,不知道怎么处理,那就直接使用管理员吧
开启http auth验证
只需要按上面的配置文件修改就行,这里说一下如何修改docker内的文件,直接看命令( 命令中的influxdb:为docker启动时-name指定的名称,也可以是容器ID):
docker cp ./influxdb.conf influxdb:/etc/influxdb/influxdb.conf
当然这个命令也支持将docker内的文件拷贝出来
docker cp influxdb:/etc/influxdb/influxdb.conf ./influxdb.conf
python influxdb
influxdb的语句其实和MySQL的差不多。而且python库也封装了一些常用的命令,只需调用函数即可执行相应的功能,当然查询语句还是要自己写的。
具体方法请参考官方文档:https://influxdb-python.readthedocs.io/en/latest/include-readme.html
grafana
安装
如果是Windows,直接下载可执行文件安装即可(我没试过就不详细说了),下载地址:https://grafana.com/grafana/download?platform=windows
docker运行:
docker run -d -p 3000:3000 --name=grafana -v grafana-storage:/var/lib/grafana grafana/grafana
命令中grafana-storage为本地文件夹路径:比如也放在/var/lib/grafana
docker更新grafana:
docker pull grafana/grafana #重新pull最新版本
docker stop my-grafana-container # 停止已运行容器
docker rm my-grafana-container # 删除旧容器
使用
浏览器访问IP:端口进入登录页面,IP看你运行在哪了,端口默认3000。用户名密码都是admin,第一次登录会提示修改密码。
进入页面后默认大概是这样的:(开始是没有添加data source)
我们先添加一下data source(数据来源),点击左边像设置(Configuration)一样按钮,然后点击data sources,之后点击add data source。选择influxdb之后进入:
name任意,主要看http的URL是influxdb的IP和端口,然后是InfluxDB Details这一栏,需要填写database(数据库),User(用户名),password(密码),http method任意,get和post都行,我选的是post。然后点击save & test,如果显示绿色的提示说明保存测试成功,如果是红色的则数据库连接有误。
添加数据
grafana的准备工作就做完了,接着就需要往数据库中保存数据了。现成的工具有telegraf、collectd等。telegraf有exe可执行文件,用起来感觉还不错。而collectd主要是Linux用的,Windows虽然有可执行文件,但体验不怎么样,需要付费升级商业版。
官方下载地址:https://portal.influxdata.com/downloads/
如果访问慢的地址:https://lanzous.com/icdvnhg
启动:telegraf.exe -config telegraf.conf
注意启动之前修改配置文件,看一些主要修改字段:
[[outputs.influxdb]]
urls = ["http://127.0.0.1:8086"] # influxdb的链接
database = "telegraf" # 数据库名,不存在的话默认会自动创建
username = "" # influxdb配置的用户名和密码
password = ""
运行之后可以使用chronograf来看一下数据库里面有没有数据,也可以直接命令行进入数据库。(chronograf很简单就不多赘述了)
进入数据库的命令:influx -host 127.0.0.1 -port 8086 -username admin -password admin
(注意修改后面的参数值),Windows需要下载可执行文件influx.exe,下载路径:https://portal.influxdata.com/downloads/。
添加grafana图表
既然数据库里有数据了,那么接下来我们通过grafana展示一下数据。
图表就不自己建了,我们也使用现成的(后面提一下怎么自己构建图表)。公开的图表下载地址:
https://grafana.com/grafana/dashboards?collector=Telegraf&dataSource=influxdb&direction=asc&orderBy=name&search=Windows
如果需要其他图表可以自己更改筛选条件,在网页的左边就有选项。
这里面有几个现成的图表,我们随便选择一个复制链接,比如第二个:https://grafana.com/grafana/dashboards/1902
接着打开grafana的网页端,点击左边的+好后点击import:
Grafana.com Dashboard这一栏中填刚才复制的地址,第二栏空着不管他,点击导入,
folder应该只有一个选项,选择他就行,telegraf选择开始添加的数据库。
接着就可以看到telegraf保存的系统状态了,不过有很多图表可能没数据,原因就需要你自己一个一个看了,可能是图表查询语句错了,也可能telegraf没有保存相应的数据。
自建图表
还是点击左边的加号,创建dashboard,
左边的add query是使用默认的Graph面板(panel),而右边则是选择面板。面板有很多,具体参考官方文档。更简单的做法是参考你前面导入的图表,看一下他们的查询语句和一些配置就知道该怎么做了,如果里面有一些选项不知道是干什么用的,点一下看看有什么变化可能就明白了。
我们直接点击add query,进入:
1、Query
填写查询语句的,Query后面是数据库的名称(也就是前面添加的data source)。下面的就是查询语句了,简单说一下:
FROM default select measurement WHERe
default默认就行,当然你选择另外一个autogen也一样,这是由于influxdb数据库的原因,influxdb直接查询数据库下的某个measurement需要这样写:select * from 数据库名.autogen.measurement名
。当然更常用的是使用如下语句查询, 这样就可以省略autogen:
use 数据库名
select * from measurement名
其中measurement类似于表一样,如果数据库配置正确的话,点击select measurement 应该会出现所有的表。
第二行的SELECT很明显就是选择字段了,第二个是选择聚合函数,值得注意的是,如果不选择聚合函数,即使数据库里有数据,图表也不会显示。GROUP BY一般默认即可,当然也可以自己修改,FORMAT AS也是默认的,ALIAS BY表示取别名,当你添加了两个以上的查询语句时,用于显示Legend来区分。
2、Visualization
图表的一些设置,这个不好细说,另外我也刚接触只会皮毛就不献丑了。如果不知道某个选项什么作用,点一下看看有什么变化吧。也可以参考公开的图表怎么设置的。
3、General
修改标题和描述用的
4、Alert
告警,应该是监控值有没有异常,如果有则发送邮件到指定邮箱(需提前配置发件邮箱),当然不一定是邮件还有其他类型。没用过,不知道怎么发送。而且使用了变量的图表还无法使用这个功能,会出现Template variables are not supported in alert queries,只有Graph面板能使用这个功能。
图片来自:https://www.jianshu.com/p/2b230390f37e
其他我就不介绍了,因为我也不会。最后说一点:页面右上角有一个刷新的图表,可以刷新数据,也可以选择自动刷新的时间间隔。
自建数据
前面使用了telegraf来将Windows的一些状态保存在数据库,现在我们说一下另一个神器的使用:AIDA64,至于这个有多神我就不描述了。虽然它功能十分强大,但现在只使用它的系统监控功能,先看一下AIDA的设置:
它可以将监控信息保存在文件,也可以发送到邮箱,甚至显示到桌面的任务栏等。当然这些我都没用过,我使用的是它将数据实时保存在共享内存中(在外部程序这个选项中),我们可以将所需要的数据勾选,然后通过编程语言来将共享内存中的数据同步到数据库,这里我使用的是Python。软件设置只需要在外部程序选项中勾选允许共享内存,另外可以选择性勾选需要的数据,也可以简单粗暴的全部勾选。
Python代码:
import re
import time
from datetime import datetime
from influxdb import InfluxDBClient
from ctypes import windll, c_char_p, c_int
tvid = '12345678' # 用于grafana区分机器
message = windll.kernel32.OpenFileMappingW
message.restype = c_int
client = InfluxDBClient(host='', port=8086, username='', password='', database='')
handle = message(1, False, "AIDA64_SensorValues")
if handle:
view = windll.kernel32.MapViewOfFile
view.restype = c_char_p
while True:
xml = view(handle, 1, 0, 0, 256)
re_ = r'<id>(.*?)</id><label>(.*?)</label><value>(.*?)</value>'
data = {}
data['tvid'] = tvid
for i in re.findall(re_, xml.decode()):
try:
data[i[0].lower()] = int(i[2])
except ValueError:
try:
data[i[0].lower()] = float(i[2])
except ValueError:
data[i[0].lower()] = i[2]
d = {
"measurement": "windows",
"time": datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ'),
"tags": {
'tvid': tvid
},
"fields": data
}
if not client.write_points([d]):
break
time.sleep(4.99)
else:
print(0)
其他可以默认,注意修改InfluxDBClient的参数。
查看共享内存有没有数据:
from ctypes import windll, c_char_p, c_int
message = windll.kernel32.OpenFileMappingW
message.restype = c_int
handle = message(1, False, "AIDA64_SensorValues")
if handle:
view = windll.kernel32.MapViewOfFile
view.restype = c_char_p
print(view(handle, 1, 0, 0, 256))
else:
print(0)
分享一下我用的AIDA64:https://lanzous.com/icdysif
我的图表json(可以点击+号 import,粘贴json导入),注意修改json中DataSource,我的是InfluxDB。有点大,放文件了:https://lanzous.com/icdz81e