proc 文件系统 系统监控

https://github.com/c9s/goprocinfo
http://blog.x2know.org/2016/06/28/monitor-system/
http://blog.x2know.org/2016/07/03/monitor-system2/
https://github.com/open-falcon/book/blob/master/zh/faq/linux-metrics.md



在Linux系统中,CPU时间的分配信息保存在/proc/stat文件中,利用率的计算应该从这个文件中获取数据。文件的头几行记录了每个CPU的用户态,系统态,空闲态等状态下分配的时间片(单位是Jiffies),这些数据是从CPU加电到当前的累计值。常用的监控软件就是利用/proc/stat里面的这些数据来计算CPU的利用率的。



https://book.open-falcon.org/zh/intro/index.html
open-falcon 具备的优势:



灵活的数据采集,支持自定义数据上报
支持策略模板、模板继承和覆盖
高效的告警判别,支持告警暂停、维护周期设置
组件支持水平拓展
大部分用golang编写,部署相对简单



没有告警升级
用户的一些操作权限设置不合理
http://blog.x2know.org/2016/06/25/open-falcon/



收到数据采集,那我们主要需要哪些数据呢?



机器的状态,cpu,内存
业务自己产生的数据,如qps等
mysql,redis等开源软件自身的状态数据
上面的数据大致可以分为两类:



机器指标
业务数据
采集方式也有两种:push和pull
当agent数量非常庞大时,如果采用pull的方式,server端需要保持大量的链接,非常消耗性能,所以我们采用agent push数据的方式



首先总结下机器指标的采集
cpu
cpu.busy
cpu.cnt
cpu.guest
cpu.idle
cpu.iowait
cpu.irq
cpu.nice
cpu.softirq
cpu.steal
cpu.system
cpu.user



内存
一般内存监控一下几个指标即可



memfree
memtotal
memused
swapfree
swaptotal
swapused
这些指标的数据可以从/proc/meminfo中获取,linux下输入 cat /proc/meminfo 得到以下信息



几个主要指标的说明



MemTotal — 总的内存大小,单位kb
MemFree — 空闲的内存大小,单位kb
SwapTotal — 总swap大小,单位kb
SwapFree — 空闲wsap大小,单位kb



磁盘相关采集项
df.bytes.free
df.bytes.total
df.bytes.used
df.inodes.free
df.inodes.total
df.inodes.used
linux下查看命令:df -lh(/ih)
采集方法:
读取/proc/mounts拿到所有挂载点



磁盘io采集项
disk.io.avgqu-sz 平均每次设备I/O操作的数据大小
disk.io.avgrq-sz 平均I/O队列长度
disk.io.await 平均每次设备I/O操作的等待时间
disk.io.ios_in_progress
disk.io.msec_read 读消耗时间
disk.io.msec_write 写消耗时间
disk.io.msec_total io总消耗时间
disk.io.msec_weighted_total 加权io总消耗时间
disk.io.read_bytes
disk.io.read_merged
disk.io.read_requests
disk.io.read_sectors
disk.io.write_bytes
disk.io.write_merged
disk.io.write_requests
disk.io.write_sectors
disk.io.svctm 平均每次io消耗时间
disk.io.util 单位时间内(1s)读写占用时间比例
linux下查看命令:iostat



机器负载采集项
load.1min
load.5min
load.15min
采集方法:直接读取/proc/loadavg
linux下查看命令:top
网络相关采集项
net.if.in.compressed
net.if.in.dropped
net.if.in.errors
net.if.in.fifo.errs
net.if.in.frame.errs
net.if.in.multicast
net.if.in.packets
net.if.out.bytes
net.if.out.carrier.errs
net.if.out.collisions
net.if.out.compressed
net.if.out.dropped
net.if.out.errors
net.if.out.fifo.errs
net.if.out.packets
net.if.total.bytes
net.if.total.dropped
net.if.total.errors
net.if.total.packets
采集方法,读取/proc/net/dev的内容



https://blog.csdn.net/rheostat/article/details/8167479
https://pastebin.ubuntu.com/18247784/
https://pastebin.ubuntu.com/16199860/
https://pastebin.ubuntu.com/16201041/
https://pastebin.ubuntu.com/18287842/
https://pastebin.ubuntu.com/18293996/



https://linux.die.net/man/1/iostat



https://www.jianshu.com/p/eccd88798728
https://www.jianshu.com/p/1fc91949df3f



安卓监控类似
https://developer.android.com/reference/android/app/usage/NetworkStatsManager.html?hl=us-en#querySummaryForDevice



open-falcon
https://zhuanlan.zhihu.com/p/114259683



https://www.cnblogs.com/arnoldlu/p/9462221.html



Where is the /proc folder on Mac OS X?
To communicate with the kernel, different UNIX systems use different interfaces - not necessarily procfs. It’s not a must-have. While it’s become quite common with Linux and FreeBSD indeed, OS X (which is based on BSD) does not implement a procfs.



The equivalents to most proc calls would be found in other tools such as sysctl(8) and the sysctl(3) call. Read the manpages (man 8 sysctl or man 3 sysctl) for some examples. Other things you can do with proc cannot be done easily on OS X. This is just a design choice.
https://superuser.com/questions/631693/where-is-the-proc-folder-on-mac-os-x



Category linux