[关闭]
@Tmacy 2016-12-02T11:19:02.000000Z 字数 6118 阅读 1687

可视化系统资源监控的开源方案

linux grafana influxdb collectd


简介

我们可以利用几个工具整合成一套实时系统资源监控方案。
需要的工具有:

工具介绍

关于这几个工具,简单做一下说明:

实施步骤

安装InfluxDB

可以在官方网站找到下载页面:
https://influxdata.com/downloads/#influxdb

也可在系统的软件源中安装,不过系统的软件源通常落后于官方的版本。

安装其实很简单,因为没有依赖,只需安装一个软件包。
例如:

  1. sudo dpkg -i influxdb_0.13.0_amd64.deb

安装之后,启动InfluxDB的数据库服务:

  1. sudo systemctl start influxdb.server

可以在终端中进入InfluxDB,也可以在web界面中管理InfluxDB数据库,数据库web管理页面:http://localhost:8083/

  1. >influx
  2. Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.
  3. Connected to http://localhost:8086 version 0.13.0
  4. InfluxDB shell version: 0.13.0
  5. >

其实web页面也是使用数据查询指令。
在数据库中创建一个名为collectd的数据库。
CREATE DATABASE collectd

查询一下是否已经创建成功,然后退出:

  1. > show databases
  2. name: databases
  3. ---------------
  4. name
  5. _internal
  6. collectd
  7. > quit

安装collectd

在很多系统的软件源都默认有collectd的软件包。例如在Deepin中,我们可以利用apt-get安装:

  1. $ sudo apt-get install collectd

安装之后,编辑配置文件/etc/collectd/collectd.conf
收集到数据后直接发给InfluxDB

  1. LoadPlugin network
  2. <Plugin network>
  3. Server "192.168.1.183" "25826"
  4. </Plugin>

在network中,有两个角色:client和server
client是用来搜集信息的,上面的配置就是默认client的配置,其含义为将数据发送给192.168.1.183的服务器。
我们可以配置多个客户端,把每个客户端的数据搜集,发送给服务器。
server一般来存储或者显示数据的。一般是监听客户端的端口:

  1. # Server
  2. <Plugin "network">
  3. Listen "192.168.0.42"
  4. Listen "172.16.0.42"
  5. Listen "239.192.74.66"
  6. Listen "ff18::efc0:4a42"
  7. </Plugin>

目前我们使用InfluxDB来存储数据,所以不会去配置collectd的server。


重启collectd
sudo systemctl restart collectd

在InfluxDB上的collectd的插件是默认关闭的,编辑配置打开collectd:

  1. [[collectd]]
  2. enabled = true
  3. # bind-address = ""
  4. database = "collectd"
  5. # typesdb = ""

之后重启InfluxDB
sudo systemctl restart influxdb.servie

备注
关于Collectd的配置,可以参考:
http://www.drupal001.com/2012/07/system-monitor-collectd/

telegraf(可选)

telegraf是Influxdata的TLCK技术栈中的搜集数据工具。可以替代Collectd作为采集端。telegraf是用golang开发的,所以基本上没有依赖。

下载安装:

  1. wget https://dl.influxdata.com/telegraf/releases/telegraf_0.13.1_amd64.deb
  2. sudo dpkg -i telegraf_0.13.1_amd64.deb

启动:

  1. sudo systemctl start telegraf.service

其输入输出源都可以用插件,代码开源。

/etc/telegraf/telegraf.conf文件中将你需要的数据源取消注释,这样就可以在服务中采集该数据

  1. [[inputs.cpu]]
  2. ## Whether to report per-cpu stats or not
  3. percpu = true
  4. ## Whether to report total system cpu stats or not
  5. totalcpu = true
  6. ## Comment this line if you want the raw CPU time metrics
  7. fielddrop = ["time_*"]

参考文档:https://docs.influxdata.com/telegraf/v0.13/

安装Grafana

Grafana的安装也是可以通过官方网站下载:http://docs.grafana.org/installation/debian/
也可以利用系统的软件源下载:

  1. apt-get install grafana

推荐在官方下载,很多情况下软件源中的软件比较旧,跟新较慢,会有bug

启动grafana

  1. sudo systemctl start grafana-server.service

grafana的默认管理页面是3000端口,在浏览器中打开http://localhost:3000/

在Data Sources里面,把InfluxDB的collectd数据库添加进去。

关于grafana的使用,可以参考官方文档:
http://docs.grafana.org/guides/basic_concepts/

配置基础的系统监控

系统详细信息说明:

cpu

使用命令cat /proc/stat查看cpu运行时状态

  1. cat /proc/stat
  2. cpu 112605 4007 30018 1422634 52008 0 536 0 0 0
  3. cpu0 29680 1081 7238 356615 10940 0 125 0 0 0
  4. cpu1 28594 900 7309 356293 12478 0 165 0 0 0
  5. cpu2 29480 1073 6832 356784 11058 0 144 0 0 0
  6. cpu3 24849 952 8638 352941 17531 0 102 0 0 0
  7. intr 5656774 18 9 0 0 0 0 0 0 1 1242 0 0 2078 0 38271 0 250 0 0 0 0 0 0 35 2031 85494 268096 25 1191 643864 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  8. ctxt 21610485
  9. btime 1469582911
  10. processes 5069
  11. procs_running 2
  12. procs_blocked 0
  13. softirq 2711939 78 760312 799 753965 38372 0 4737 716514 0 437162

第一行的数值表示的是CPU总的使用情况
单位:jiffies
(jiffies是内核中的一个全局变量,用来记录自系统启动一来产生的节拍数,在linux中,一个节拍大致可理解为操作系统进程调度的最小时间片,不同linux内核可能值有不同,通常在1ms到10ms之间)

从左到右依次是:

总的cpu时间
totalCpuTime = user + nice+ system + idle + iowait + irq + softirq + stealstolen + guest

总的Cpu使用率计算
计算方法:
一、 采样两个足够短的时间间隔的Cpu快照,分别记作t1,t2,其中t1、t2的结构均为:
(user、nice、system、idle、iowait、irq、softirq、stealstolen、guest)的9元组;
二、 计算总的Cpu时间片totalCpuTime
a) 把第一次的所有cpu使用情况求和,得到s1;
b) 把第二次的所有cpu使用情况求和,得到s2;
c) s2 - s1得到这个时间间隔内的所有时间片,即totalCpuTime = j2 - j1 ;
三、 计算空闲时间idle
idle对应第四列的数据,用第二次的第四列- 第一次的第四列即可
idle=第二次的第四列- 第一次的第四列
四、 计算cpu使用率
pcpu =100* (total-idle)/total

在telegraf中,cpu计算出的结果是使用率,在collectd中的cpu值是原始值。

memory

在系统中的内存信息查看:
cat /proc/meminfo

  1. >cat /proc/meminfo
  2. MemTotal: 7872252 kB
  3. MemFree: 1444120 kB
  4. MemAvailable: 5806544 kB
  5. Buffers: 190568 kB
  6. Cached: 4426100 kB
  7. SwapCached: 0 kB
  8. Active: 3616728 kB
  9. Inactive: 2460388 kB
  10. Active(anon): 1472420 kB
  11. Inactive(anon): 409156 kB
  12. Active(file): 2144308 kB
  13. Inactive(file): 2051232 kB
  14. Unevictable: 172 kB
  15. Mlocked: 172 kB
  16. SwapTotal: 0 kB
  17. SwapFree: 0 kB
  18. Dirty: 316 kB
  19. Writeback: 0 kB
  20. AnonPages: 1460664 kB
  21. Mapped: 702992 kB
  22. Shmem: 421132 kB
  23. Slab: 249668 kB
  24. SReclaimable: 208752 kB
  25. SUnreclaim: 40916 kB
  26. KernelStack: 9456 kB
  27. PageTables: 39048 kB
  28. NFS_Unstable: 0 kB
  29. Bounce: 0 kB
  30. WritebackTmp: 0 kB
  31. CommitLimit: 3936124 kB
  32. Committed_AS: 6692148 kB
  33. VmallocTotal: 34359738367 kB
  34. VmallocUsed: 0 kB
  35. VmallocChunk: 0 kB
  36. HardwareCorrupted: 0 kB
  37. AnonHugePages: 4096 kB
  38. HugePages_Total: 0
  39. HugePages_Free: 0
  40. HugePages_Rsvd: 0
  41. HugePages_Surp: 0
  42. Hugepagesize: 2048 kB
  43. DirectMap4k: 159932 kB
  44. DirectMap2M: 7917568 kB

也可以利用free命令来查看

  1. free -m
  2. total used free shared buff/cache available
  3. Mem: 7687 1629 1324 418 4733 5598
  4. Swap: 0 0 0

主要关注的几个参数:
- MemTotal/total :内存总量
- MemFree/free : 空闲内存
- MemAvailable/available :可用内存
- used :已经使用的内存
- Shmem/shared : 共享内存
- Buffers: 块设备的读写缓冲区
- Cached :作为文件系统的cache,如果cache大,表示缓存的page很多,能够提高命中率。

可用内存的计算方法:
available = free+buffers+cached

disk

利用df命令查看各分区的存储情况

  1. df -h
  2. 文件系统 容量 已用 可用 已用% 挂载点
  3. udev 3.8G 0 3.8G 0% /dev
  4. tmpfs 769M 9.4M 760M 2% /run
  5. /dev/sda4 120G 83G 32G 73% /
  6. tmpfs 3.8G 162M 3.6G 5% /dev/shm
  7. tmpfs 5.0M 4.0K 5.0M 1% /run/lock
  8. tmpfs 3.8G 0 3.8G 0% /sys/fs/cgroup
  9. /dev/sda2 123G 49G 74G 41% /home/win
  10. tmpfs 769M 28K 769M 1% /run/user/1000

利用du命令,查看目录的存储情况

  1. du -sh <目录名>
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注