zoukankan      html  css  js  c++  java
  • InfulxDb+grafana监控Windows运行状态

    看一下效果图:
    在这里插入图片描述

    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

  • 相关阅读:
    软件工程第四次作业-题目2
    oracle数据库本地网络服务名配置常见问题
    2020软件工程第三次作业
    2020软件工程第二次作业
    2020软件工程第一次作业
    20145208 蔡野 《网络攻防》 后门原理与实践
    20145208蔡野 《网络对抗》逆向及BOF基础实践
    密码分析学学习总结
    20145208 《信息安全系统设计基础》课程总结
    20145208 《信息安全系统设计基础》第十四周学习总结
  • 原文地址:https://www.cnblogs.com/kanadeblisst/p/12918729.html
Copyright © 2011-2022 走看看