• 自动化运维监控展示三剑客:Telegraf+Influxdb 2.4+ Grafana


    1 总览

    自动化运维监控展示三剑客:Telegraf+Influxdb+ Grafana。
    Telegraf 收集数据:是一个用 Go 编写的代理程序,可收集系统和服务的统计数据,并写入到 InfluxDB 数据库。内存占用小,通过插件系统可轻松添加支持其他服务的扩展。
    Influxdb存储数据: 是一个开源的分布式时序、时间和指标数据库,使用 Go 语言编写,无需外部依赖。
    Grafana:展示数据。

    在这里插入图片描述

    2 Influxdb 2.4

    2.1 Influxdb存储的数据结构

    infludb中存储的是时间序列数据,比如说某个时间点系统负载、服务耗时等信息,时间序列数据可以包含多个值。关于什么是时间序列数据,简单来来说就是数据是和一个时间点关联的,结合mysql中的记录与id关系来看就是时间序列数据的主键就是时间点(timestrap)。

    infludb中的一条数据至少包括measurement(对应mysql中表概念)、timestamp、至少一个k-v结构的field,再加上0个或者多个k-v结构的tag。对比mysql来看,measurement就是一张表,其主键是timestamp时间戳,tag和field对应就是表中列,tag和field都是k-v接口,k对应列的名字,v对应该列存储的值,tag和field不同的是,tag是有索引的而field没有(如果查询条件为tag则会扫描所有查询到的数据),对于mysql表的有索引列和无索引列。注意mysql中的表需要提前定义结构,而influxdb中的measurement无需提前定义,其null值也不会被存储。
    在这里插入图片描述

    points的数据结构:
    在这里插入图片描述

    2.2 Windows安装

    下载地址:https://docs.influxdata.com/influxdb/v2.4/install/?t=Windows
    在这里插入图片描述

    2.3 运行influxdb

    打开cmd,切换到influxdb目录,运行,如下图
    在这里插入图片描述
    在这里插入图片描述

    2.4 浏览器访问influxdb

    http://localhost:8086/

    在这里插入图片描述

    输入下面初始用户名、密码、org、bucket
    在这里插入图片描述

    就可以进入下面页面了。

    在这里插入图片描述

    2.5 Token

    访问influxdb需要token,可以到如下位置找到

    在这里插入图片描述
    在这里插入图片描述

    2.6 python写数据到influxdb

    下面代码利用point写入。首先pip install influxdb-client

    from datetime import datetime
    import time
    
    from influxdb_client import InfluxDBClient, Point, WritePrecision
    from influxdb_client.client.write_api import SYNCHRONOUS
    
    # You can generate an API token from the "API Tokens Tab" in the UI
    token = "z-6hRtR4VeNQZCVQGmvOm5I-NHdxXC-lo4GwIDDt2fIX_vvVnZjDhZYtkJMF01BTZs_SqqunX6Tr7KXVYDyZZA=="
    org = "test"
    bucket = "test1"
    
    with InfluxDBClient(url="http://localhost:8086", token=token, org=org) as client:
        write_api = client.write_api(write_options=SYNCHRONOUS)
        for i in range(30):
            point = Point("mem").tag("host", "host1").field("used_percent", 23.43234543+i).time(datetime.utcnow(), WritePrecision.NS)
            write_api.write(bucket, org, point)
            time.sleep(1)
        client.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    2.7 查看influxdb中数据

    我们在上节通过python写到influxdb的名为mem的measurement. 如下图filter中选择的men。就可以在上面看到数据了。
    在这里插入图片描述

    3 grafana

    3.1 windows安装

    下载:https://grafana.com/grafana/download?platform=windows
    在这里插入图片描述

    下载后直接运行安装。

    默认端口号为3000,但有可能与其他端口号冲突,启动不了,可在defaults.ini中修改为其他。我改成了8087.
    在这里插入图片描述

    打开cmd,到安装目录:C:\Program Files\GrafanaLabs\grafana\bin,运行grafana-server.exe启动。
    在这里插入图片描述

    3.2 浏览器访问

    我用chrome访问报错“If you’re seeing this Grafana has failed to load its application files”
    在这里插入图片描述

    尝试修改serve_from_sub_path=true,allow_embedding = true都不起作用。最后下载了firefox,可以使用。http://localhost:8087/

    在这里插入图片描述

    输入默认的账号密码:admin\admin. 重置完密码可以使用:

    在这里插入图片描述

    3.3 加载influxdb 2数据

    选择首页的DATA SOURCES. 接着选择influxdb。
    在这里插入图片描述

    Influxdb 2 需要使用Flux查询语言,不是influxQL(influxdb 1使用这个,类似sql).
    在这里插入图片描述

    输入url:http://localhost:8086
    在这里插入图片描述

    输入org、token、bucket。测试成功。

    在这里插入图片描述

    3.4 查看数据

    新建New dashboard,然后输入查询语句,展示下图。
    FLux查询语句如下:

    from(bucket: "test1")
        |> range(start: -1h)
        |> filter(fn: (r) => r._measurement == "mem")
        |> filter(fn: (r) => r._field == "used_percent")
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    4 Telegraf

    4.1 下载与安装

    在influx官网可以下载telegraf。地址:https://www.influxdata.com/get-influxdb/。

    在这里插入图片描述

    Windows版直接解压缩即可:

    在这里插入图片描述

    4.2 集成influxdb

    我直接修改telegraf.conf里的influxdb_v2不行,后台报“[outputs.influxdb] Failed to write metric (will be dropped: 401 Unauthorized):”。
    所以,现在influxdb里新建telegraf配置,然后覆盖telegraf.conf解决的。

    第一步,loaddata选择telegraf,然后create configuration。
    在这里插入图片描述

    第二步,选择system。
    在这里插入图片描述

    第3步,给配置随便起个名字。
    在这里插入图片描述

    第4步,点击finish。
    在这里插入图片描述

    第5步,点击刚刚建立的配置。
    在这里插入图片描述
    全量负责下面配置
    在这里插入图片描述

    第6步,将上面的配置直接全量覆盖telegraf的telegraf.conf。并修改token。
    在这里插入图片描述
    在这里插入图片描述

    4.3 启动telegraf

    上面集成完influxdb后,就可以启动telegraf了。支持cmd里运行telegraf即可。

    在这里插入图片描述

    4.4 在influxdb里看数据

    如2.7节讲的,在data explorer中可以查看
    在这里插入图片描述

    点击上图的SCRIPT EDITOR可以查看flux查询语言,会在grafana中使用。

    在这里插入图片描述

    from(bucket: "telegraf_test")
      |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
      |> filter(fn: (r) => r["_measurement"] == "cpu")
      |> filter(fn: (r) => r["_field"] == "usage_system")
      |> filter(fn: (r) => r["cpu"] == "cpu-total")
      |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
      |> yield(name: "mean")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    4.5 Grafana展示

    我尝试import现有的模板,始终不展示数据,或者顶多展示个CPU,故我直接新建dashboard了,然后采用flux语言自己查数据。
    如下图新建dashboard。
    在这里插入图片描述

    新建一个panel
    在这里插入图片描述

    将上一节的flux语言copy到下图相应位置,就可以了。然后save。

    在这里插入图片描述

    保存后如下图。

    在这里插入图片描述

    类似的,可以再加个内存的。

    在这里插入图片描述

  • 相关阅读:
    SpringCloud(15)之SpringCloud Gateway
    56.【树型结构】
    JS实现数组去重的八种方法(实用)
    CentOS系统/root根目录扩容(扩展逻辑卷)
    Putty中运行matlab文件
    微信小程序地图polyline坐标太多异常显示BUG
    【机器学习】机器学习的基本概念/术语2
    SpringMVC-5种类型参数传递
    外汇天眼;VT Markets 赞助玛莎拉蒂MSG Racing电动方程式世界锦标赛
    antd-design-vue Table组件全局配置(分页器...)
  • 原文地址:https://blog.csdn.net/zephyr_wang/article/details/126780783