性能测试&工作总结--GTI应用服务性能监控平台

GTI应用服务性能监控平台

0. 版本获取

  1. InfluxDB: https://portal.influxdata.com/downloads
  2. Grafana: https://grafana.com/grafana/download?platform=linux
  3. Telegraf: https://github.com/influxdata/telegraf/releases
  4. Collectd: http://collectd.org/download.shtml

1. GTI应用服务性能监控平台介绍

想打造New Relic & One APM那样漂亮的实时监控平台, 我们只需要InfluxDB/Collectd&Telegraf/Grafana, 这些工具间关系如下:
采集数据(Collectd&Telegraf) -> 存储数据(InfluxDB) -> 显示数据(Grafana)

  1. InfluxDB是Go语言开发的一个开源分布式时序数据库, 非常适合存储指标, 事件, 分析等数据, 可任意独立部署;
  2. Collectd是C语言写的一个系统性能采集工具, 可任意独立部署, 我们用它监控Java应用(WebApp, NativeApp)的性能, 其工作原理如下:
    在这里插入图片描述
  3. Telegraf是Go语言写的一个系统采集工具, 需部署在待监控的系统或中间件服务器上, 我们用它监控服务器系统及主流中间件的性能;
  4. Grafana是纯JavaScript开发的前端工具, 用于访问InfluxDB, 自定义报表, 显示图表等, 可任意独立部署;
    在这里插入图片描述
1. InfluxDB
  1. 安装
    1. yum localinstall influxdb-1.2.4.x86_64.rpm
    2. 拷贝typs.db至/usr/local/share/collected/ (若不存在, 则创建该目录, 路径可自定义)
    3. chmod 777 /usr/local/share/collectd/types.db
    4. ps: influxdb更高版本去掉了图形化管理页面, 建议没有特殊需要则安装1.2.4版本
  2. 配置
    1. 修改/etc/influxdb/influxdb.conf如下:
      1. reporting-disabled = true (禁用InfluxDB将相关信息上传至其官网)
      2. bind-address = “:8090” (新增该节点, 同时使用命令: netstat -Inp | grep 8090查看端口是否已存在)
      3. [admin]
        enabled = true
        bind-adress = “:8083”
      4. [http]
        enabled = true
        bind-adress = “:8086”
      5. [[collectd]]
        enabled = true
        bind-adress = “服务器IP:25826”
        database = “ktv” (建议按业务命名)
        typesdb = “/usr/local/share/collectd/types.db”
        batch-size = 5000
        batch-pending = 10
        batch-timeout = “10s”
        read-buffer = 0
  3. 运行
    1. service influxdb start
  4. 报错
    1. 错误提示: Redirecting to /bin/systemctl start influxdb.service
      原因: 当前Linux操作系统使用的是RedHat7&CentOS7&Fedora, 不支持service启动服务的方式, 需要使用systemctl命令启动
      备注: 查看当前Linux操作系统版本信息: lsb_release -a 若该命令不存在, 则通过命令: yum install lsb安装
      解决: systemctl start influxdb
  5. 创建数据库
    1. 在浏览器上打开 http://服务器IP:8083
    2. 在Query栏中输入CREATE DATABASE "ktv"回车
    3. Influxdb1.2.4之后的版本去除管理页面, 需要通过后台命令进行登录
      1. 创建数据库: influx -host 127.0.0.1:8086
      2. 创建数据库: CREATE DATABASE “ktv”
2. Telegraf
1. Linux版本
  1. 安装
    yum localinstall telegraf-1.10.1-1.x86_64.rpm
  2. 升级
    1. 备份配置文件: /etc/telegraf/telegraf.conf
    2. 查询已安装版本: rpm -qa | grep telegraf
    3. 卸载已安装版本: rpm -e --nodeps telegraf-1.2.1-1.x86_64
    4. 安装最新版本: yum localinstall telegraf-1.10.1-1.x86_64.rpm
  3. 配置
    1. 基础配置
      (1) 修改/etc/telegraf/telegraf.conf如下:
          [agent]
              logfile = “/var/log/telegraf/telegraf.log”
          [[outputs.influxdb]]
              urls = [“http://InfluxDB 服务器IP:8086”]
              database = “实际数据库名”
    2. 中间件配置
          若需监控任意中间件, 则需配置IP, 端口及访问权限, 若需监控多个实例, 请用逗号隔开
              例:
                  [[inputs.redis]]
                      servers = [“tcp://192.168.57.10:6379”, “tcp://192.168.57.10:6378”]
                  [[inputs.zookeeper]]
                      servers = [“192.168.57.10:2181”, “192.168.57.10:2182”]
    3. 网络监控配置
          将/etc/telegraf/telegraf.conf中的如下两个指标配置前的注释去掉, 开启网络监控:
              [[input.net]]
              [[input.netstat]]
    4. 进程监控配置
      1. 按如下配置开启, 通过进程名单监控单个或多个进程
            修改/etc/telegraf/telegraf.conf如下:
                [[inputs.procstat]]
                    pattern = “processName”
            可使用pgrep -f processName命令检查进程名是否对应目标监控进程, 需保证命令执行返回的进程号只有一个并且对应需要监控的进程. 可以通过修改processName的方式进行调试, 保证命令的执行结果唯一性, 如果需要监控多个进程, 则添加多个[[inputs.procatat]]节点, 如:
                [[inputs.procstat]]
                    pattern = “processName1”
                [[inputs.procstat]]
                    pattern = “processName2”
    5. GPU监控配置
          Telegraf当前支持nvidia卡的GPU监控, telegraf调用GPU驱动中自带的信息展示程序采集信息, 需要在telegraf.conf中新增配置:
              [[inputs.nvidia_smi]]
                  ## Optional: path to nvidia-smi binary, defaults to $PATH viaexec.LookPath
                  # bin_path = “/usr/bin/nvidia-smi”
                  ## Optional: timeout for GPU polling
                  # timeout = “5s”
    6. 监控配置扩展
          当telegraf无法监控某些应用组件或中间件的性能指标, 需要编写监控脚本或监控命令来完成时, 可以使用[[inputs.exec]]配置项, 监控多个实例, 可添加多个[[inputs.exec]]节点, 同时以name_suffix参数区分不同实例
          如下所示:
              [[inputs.exec]]
                  ----若执行多个命令或脚本, 需要使用逗号隔开, redis配置了密码, 存在特殊字符需要转义
                  commands = [
                      “/redis-3.0.5-master/src/redis-cil -h 192.168.57.10 -p 6379 slowlog len”
                      ]
                  ----表名前缀, 默认为exec, 可进行自定义
                  name_override = “redis_slowlog”
                  timeout = “5s”
                  ----表名后缀, 用于区分不同监控实例, 若仅监控单个实例, 则配置可忽略
                  name_suffix = “_192.168.57.10”
                  ----数据格式化
                  data_fromat = “value”
                  data_type = “integer”
  4. 运行
            service telegraf start
  5. 报错
        若运行过程中, 发现启动失败或启动成功无监控数据, 请查看打屏日志或查看/var/log/telegraf目录下运行日志.
3. Collectd
    1. 安装

        拷贝collectd至/opt

    2. 配置
  1. 开启WebAPP(容器类)或NativeAPP(本地引用)的JMX远程监控:
            例: Tomcat的JMX远程监控配置
            修改/usr/local/tomcat7/bin/catalina.sh文件:
            查找到如下行:
            #-----ExecuteTheRequestedCommand-----
            在该行之上添加如下信息:
            CATALINA_OPTS="$CATALINA_OPTS
            -Dcom.sun.management.jmxremote
            -Djava.rmi.server.hostname=XXX.XXX.XXX.XXX
            -Dcom.sun.management.jmxremote.port=8888
            -Dcom.sun.management.jmxremote.ssl=false
            -Dcom.sun.management.jmxremote.authenticate=false"

            例: Java本地应用的JMX远程监控配置
            修改start.sh文件
            新增如下行信息
            JAVA_OPTS="$JAVA_OPTS
            -Dcom.sun.management.jmxremote
            -Djava.rmi.server.hostname=XXX.XXX.XXX.XXX
            -Dcom.sun.management.jmxremote.port=8888
            -Dcom.sun.management.jmxremote.ssl=false
            -Dcom.sun.management.jmxremote.authenticate=false"

            例: SpringBoot应用的JMX远程监控配置
            修改/etc/telegraf/telegraf.conf文件
            可修改
            [[inputs.jolokia]]
            [[inputs.jolokia2_agent]]
            [[inputs.jolokia2_proxy]]
            几处配置
  2. 修改/opt/collectd/etc/collectd.conf如下:
            <Plugin network>
                # client setup:
                    Server “InfluxDB服务器IP”“25826”
            </Plugin>
            ----监控Java应用前, 则需开启JMX远程监控
            <Connection>
                Host “Java应用服务器IP:JMX端口”
                ServiceURL “service:jmx:rmi:///jndi/rmi:// Java应用服务器IP:JMX端口/jmxrmi”
            Collect “memory-heap”
                Collect “memory-nonheap”
                Collect “memory_pool”
                Collect “cpu”
                Collect “thread”
                Collect “gc-count”
                Collect “gc-time”
            </Connection>
            ----若需监控多个 Java 应用,则添加多个 Connection 节点
    3. 运行

        /opt/collectd/sbin/collectd

    4. 报错
  1. 错误提示: lt_dlopen (“/opt/collectd/lib/collectd/java.so”) failed: file
    not found.
    原因: libjvm.so 未加载.
    解决:
    (1) 打开/etc/profile,增加如下:
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/java/jdk1.7.0_79/jre/lib/amd64/server:/home/java/jdk1.7.0_79/jre/lib/amd64
    提示:关于 jdk 的 lib 库加载,需要看 jdk 默认安装路径在哪,然后根据实际路径对其修改
    (2) 输入:source /etc/profile ,使上述配置生效
    (3) 重启 collectd:/opt/collectd/sbin/collectd
  2. 错误提示“没找到 java.so”(完成第 1 个问题中修改环境变量后)
    问题原因: libjvm.so 未加载.
    解决方法: 在/etc/ld.so.conf 中添加 libjvm.so 所在路径,执行命令
    ldconfig 重启生效即可解决找不到 java.so 的问题
    备注: ld.so.conf 执行优先级大于 profile
  3. 错误提示:
    在这里插入图片描述解决方法: 拷贝一份 lib 放在 var 文件夹路径下即可
  4. 错误提示:.Lookingup “hostname”failed. 在这里插入图片描述
    原因: 主机名未绑定 IP
    解决:
    (1) 打开/etc/hosts,增加如下:
    主机 IP 地址 主机 Host 名
    提示:关于主机名,可通过命令 hostname 查询
    (2) 输入:source /etc/hosts ,使上述配置生效
    (3) 关闭&重启 collectd
  5. 错误提示:Grafana 无法监控到数据且 InfluxDB 中未写入 JVM 监控数据.
    原因: JMX Server 在 启 用 JVM 参 数 配 置
    -Dcom.sun.management.jmxremote.port=XXXX 监控端口 XXXX 时,会启用另外一个随机的数据通讯端口 YYYY
    解决: 把这个随机端口固定,在 JVM 参数基础上添加如下配置:
    -Dcom.sun.management.jmxremote.rmi.port=XXXX(与上一配置同一端口)
4. Granafa
    1. 安装

    yum localinstall granafa-5.4.2-1.x86_64.rpm

    2. 配置

    修改/etc/grafana/grafana.ini 如下:
        [smtp]
            enabled = true

    3. 运行

        service grafana-server start

    4. 监控
  1. 登陆
        在浏览器打开 http://服务器 IP:3000,输入 admin/admin,点击【Login】登录;
  2. 报错
    1. 若运行过程中,发现 grafana-server 启动失败或端口号 3000 不存在,请查
      看/var/log/grafana 目录下运行日志如下:
      t=2018-08-10T10:36:34+0800 lvl=eror msg=“Failed to verify pid directory” lo
      gger=server error=“mkdir /var/run/grafana: permission denied”
      原因:因为权限原因导致无法创建目录/var/run/grafana,进而导致无法生成
      grafana-server.pid 文件,grafana 缺少该文件自然无法正常启动.
      解决: 依次执行命令:
      mkdir /var/run/grafana
      chmod -R 777 /var/run/grafana
    2. 监控有数据,页面鼠标放图上有数据,但是没有图形展示,提示 Data points
      outside time range:
      原因: 浏览器所在的操作系统时间不对,导致数据无法展示
      解决: 修改浏览器所在机器的系统时间,改为当前正确时间,关闭浏览器重新打
      开监控页,显示正常
    3. 监控页面没有数据,查看 InfluxDB 数据,time 字段时间加 8 小时后与当前
      时间不等
      原因: InfluxDB 所在服务器系统时间时区不对,需将其改为 CST 时区.
      解决: 修改系统时间时区
      timedatectl set-timezone Asia/Shanghai
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值