• 基于 Njmon + InfluxDB + Grafana 实现性能指标实时可视监控


    引言

    最近逛 nmon 官网时,发现了一个新工具 njmon,功能与 nmon 类似,但输出为 JSON 格式,可以用于服务器性能统计。

    可以使用 njmon 来向 InfluxDB 存储服务器性能统计数据,再通过 Grafana 实时读取展示,来实现性能测试过程中的实时可视化监控服务器性能指标的目的。

    当然,传统的 nmon、InfluxDB+Grafana+Jmeter等都可以实现。

    验证环境

    CentOS Linux release 7.6.1810 (Core)

    整体架构

    原图链接:http://nmon.sourceforge.net/docs/nmon_outline_800.png

    InfluxDB

    InfluxDB 是一个由 InfluxData 开发的开源时序型数据。它由 Go 写成,着力于高性能地查询与存储时序型数据。InfluxDB 被广泛应用于存储系统的监控数据,IoT 行业的实时数据等场景。

    InfluxDB 的语法是类 SQL 的,增删改查与 mysql 相同。InfluxDB 中的 measurement 对应的关系型数据库中的 table 。默认端口是 8086。

    安装 & 启动

    官方教程:https://docs.influxdata.com/influxdb/v1.7/introduction/installation/

    配置 InfluxDB 的 yum 源:

    $ cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo
    [influxdb]
    name = InfluxDB Repository - RHEL $releasever
    baseurl = https://repos.influxdata.com/rhel/$releasever/$basearch/stable
    enabled = 1
    gpgcheck = 1
    gpgkey = https://repos.influxdata.com/influxdb.key
    EOF
    

    yum 安装

    # CentOS 7-, RHEL 7-
    $ sudo yum install -y influxdb
    $ sudo service influxdb start
    
    # CentOS 7+, RHEL 7+
    $ sudo yum install -y influxdb
    $ sudo systemctl start influxdb
    

    创建 njmon 库

    $ influx
    > create database njmon
    > show databases
    name: databases
    name
    ----
    _internal
    njmon
    > exit
    

    启用用户认证

    添加用户,设置权限。

    # 查看所有用户
    > show users
    user admin
    ---- -----
    
    # 创建 admin 用户,设置密码为 admin
    > create user "admin" with password 'admin' with all privileges
    
    # 再次查看用户信息,发现 admin 为 true
    > show users
    user admin
    ---- -----
    admin true
    

    InfluxDB 默认是禁用认证策略的。

    # 编辑配置文件,把 [http] 下的 auth-enabled 选项设置为 true
    $ vi /etc/influxdb/influxdb.conf
    [http]
      ...
      auth-enabled = true
      ...
      
    # 重启服务,配置生效
    $ systemctl restart influxdb.service
    

    njmon

    njmon = nmon + JSON format + real-time push to a stats database + instant graphing of "all the stats you can eat" (AIX and Linux)

    This njmon is a major overhaul of nmon for the next 10 years:

    • Load more stats
    • JSON format is self documenting, flexible and the performance stats format for many new tools
    • Direct real-time loading of the JSON into modern open source time aware databases
    • New age browser based graphing tools allow dynamic data choice and graph style per VM, per server or across the estateAll this will be covered and more including many demo's.

    与 nmon 类似,但输出为 JSON 格式,可以用于服务器性能统计。

    安装 njmon

    官方下载总目录:https://sourceforge.net/projects/nmon/files/

    # 下载 
    $ wget http://sourceforge.net/projects/nmon/files/njmon_linux_binaries_v53.zip
    
    # 解压 
    $ unzip njmon_linux_binaries_v53.zip
    
    # 选择相应版本,放到 local 的 bin 下
    $ mv njmon_linux_RHEL7_AMD64_v53 /usr/local/bin/njmon
    
    # 验证
    $ njmon -?
    

    njmon 统计的指标项

    $ njmon -c 1 -s 1 | jq keys
    [
      "cpu_total",
      "cpuinfo",
      "cpus",
      "disks",
      "filesystems",
      "identity",
      "lscpu",
      "networks",
      "os_release",
      "proc_meminfo",
      "proc_version",
      "proc_vmstat",
      "stat_counters",
      "timestamp",
      "uptime"
    ]
    

    关于 jq 的功能和使用,可以参见我之前写的文章 “linux 下强大的 JSON 解析命令 jq”。

    安装 njmon_tools

    # 下载
    $ wget http://sourceforge.net/projects/nmon/files/njmon_tools_v50.zip
    
    # 解压
    $ unzip njmon_tools_v50.zip
    Archive:  njmon_tools_v50.zip
      inflating: line2pretty.py
      inflating: njmon2influx.py
      inflating: njmond.conf
      inflating: njmond.py
      inflating: njmonold2line.py
      inflating: pretty2line.py
    

    采集数据到 InfluxDB

    官方设置了多种采集方式,本教程基于 njmon2influx.py 采集方式。

    修改配置文件 njmond.conf

    {
        "njmon_port": 8181,
        "njmon_secret": "ignore",
        "data_inject": false,
        "data_json": true,
        "directory": "/home/njmon/data",
        "influx_host": "localhost",
        "influx_port": 8086,
        "influx_user": "admin",
        "influx_password": "admin",
        "influx_dbname": "njmon",
        "workers": 2,
        "debug": true,
        # for njmon2influx.py
        "batch": 100
    }
    

    采集数据

    # 间隔 5 秒,一直采集数据
    $ nohup njmon -s 5 | ./njmon2influx.py njmond.conf >/dev/null 2>&1 &
    
    # 监控 log
    $ tail -f /home/njmon/data/njmon2influx.log
    

    InfluxDB 查询数据

    # 用户名密码登录
    $ influx -username admin -password admin
    Connected to http://localhost:8086 version 1.7.10
    InfluxDB shell version: 1.7.10
    
    # 查看库
    > show databases
    name: databases
    name
    ----
    _internal
    njmon
    
    # 使用 njmon
    > use njmon
    Using database njmon
    
    # 查看 measurements,有数据表示已经采集到
    > show measurements
    name: measurements
    name
    ----
    cpu_total
    cpuinfo
    cpus
    disks
    filesystems
    identity
    lscpu
    networks
    os_release
    proc_meminfo
    proc_version
    proc_vmstat
    stat_counters
    timestamp
    uptime
    

    Grafana

    Grafana 是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知

    安装

    官方教程:https://grafana.com/grafana/download

    $ wget https://dl.grafana.com/oss/release/grafana-6.6.2-1.x86_64.rpm
    $ sudo yum install -y grafana-6.6.2-1.x86_64.rpm
    

    启动

    # 启动并验证
    $ sudo systemctl daemon-reload
    $ sudo systemctl start grafana-server
    $ sudo systemctl status grafana-server
    
    # 配置自启动
    $ sudo systemctl enable grafana-server.service
    

    默认密码:admin / admin,登录地址:http://xx.xx.xx.xx:3000

    安装插件

    # 安装插件 grafana-clock-panel 
    # 插件链接:https://grafana.com/grafana/plugins/grafana-clock-panel
    $ grafana-cli plugins install grafana-clock-panel
    
    # 安装插件 grafana-piechart-panel
    # 插件链接:https://grafana.com/grafana/plugins/grafana-piechart-panel
    $ grafana-cli plugins install grafana-piechart-panel
    
    # 重启生效
    $ service grafana-server restart
    

    配置

    添加数据源

    选择 InfluxDB,并配置

    导入仪表盘模板

    njmon 模板链接:https://grafana.com/grafana/dashboards?search=njmon

    选择 “njmon Single Host njmon for Linux v11” 模板:

    复制 ID ,在 Grafana 中导入即可:

    选择 InfluxDB。

    导入完成。

    查看监控数据

    参考资料

  • 相关阅读:
    如何划分与组织内存(上)?
    CountDownLatch和CyclicBarrier:如何让多线程步调一致?
    怎样用读写锁快速实现一个缓存?
    并发容器的前世今生是怎样的?
    java的原子类到底是啥?ABA,CAS又是些什么?
    设置工作模式与环境(中):建造二级引导器
    希尔排序
    order by是怎样工作的?
    如何用信号量去实现一个限流器?
    读多写少的场景下,竟然还有比读写锁更牛X的锁?
  • 原文地址:https://www.cnblogs.com/daodaotest/p/12508181.html
Copyright © 2020-2023  润新知