NetData 一个Linux性能实时监控探针

NetData 是一个分布式的实时健康监测系统,它实时提供超高水平的监测功能,每秒收集数千个系统指标(也包括应用程序,如 Web 服务器和数据库服务器),并有着一个现代感十足的交互式 Web 仪表盘。NetData 可以快速、高效的永久运行在所有 Linux 系统(真实或虚拟服务器、容器、物联网设备等),而不破坏其核心功能。Netdata一旦安装就不需要额外的配置,但提供了重要的定制。该应用程序的效率和速度旨在与本机控制台管理工具(如vmstat,iostat和htop)相媲美。 监测内容:下面是Netdata目前检测的内容(大多数都不需要进行配置,安装后即可开始监测)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1.CPU的使用率,中断,软中断和频率(总量和每个单核)
2.RAM,互换和内核内存的使用率(包括KSM和内核内存deduper)
3.硬盘输入/输出(每个硬盘的带宽,操作,整理,利用等)
4.IPv4网络(数据包,错误,分片):
TCP:连接,数据包,错误,握手
UDP:数据包,错误
广播:带宽,数据包
组播:带宽,数据包
5.Netfilter/iptables Linux防火墙(连接,连接跟踪事件,错误等)
6.进程(运行,受阻,分叉,活动等)
7.NFS文件服务器,v2,v3,v4(输入/输出,缓存,预读,RPC调用)
8.网络服务质量(唯一一个可实时可视化网络状况的工具)
9.应用程序,通过对进程树进行分组(CPU,内存,硬盘读取,硬盘写入,交换,线程,管道,套接字等)
10.Apache Web服务器状态(v2.2, v2.4)
11.Nginx Web服务器状态
12.Mysql数据库(多台服务器,单个显示:带宽,查询/s, 处理者,锁,问题,临时操作,连接,二进制日志,线程,innodb引擎等)
13.ISC Bind域名服务器(多个服务器,单个显示:客户,请求,查询,更新,失败等)
14.Postfix邮件服务器的消息队列(条目,大小)
15.Squid代理服务器(客户带宽和请求,服务带宽和请求)
16.硬件传感器(温度,电压,风扇,电源,湿度等)
17.NUT UPSes(负载,充电,电池电压,温度,使用指标,输出指标)
18.可以监测任意数量的SNMP服务,不过你需要进行配置,还可以对此软件进行扩展,可以使用任何语言编写插件,以此来从任何来源收集数据。
关于NetData的相关网址如下:
1
2
3
https://my-netdata.io/                 //官网
https://github.com/firehol/netdata //Github
https://my-netdata.io/#demosites //Demo
一般情况下,直接在 root 权限下运行以下命令即可。
1
2
3

bash <(curl -Ss https://my-netdata.io/kickstart.sh)
#CDN备份:https://cdn.kixss.com/shell/kickstart.sh
倘若你想使用NetData的插件以及API或者所需依赖包,你也可以用下面的这个命令,它会将上述内容一并安装。 (注:在使用这条命令前,请使用apt-get update或者yum upgrade命令更新软件包列表)
1
bash <(curl -Ss https://my-netdata.io/kickstart.sh) all
倘若你有需要在64位的缺少软件包管理器的 Linux 上安装的需求(例如CoreOS, CirrOS, busybox systems)则可以运行这个命令,netdata将以二进制编译形式进行安装。
1
bash <(curl -Ss https://my-netdata.io/kickstart-static64.sh)
如果这个命令不能正常运行,那么试着分步运行以下命令。
1
2
wget -O /tmp/kickstart-static64.sh https://my-netdata.io/kickstart-static64.sh
sh /tmp/kickstart-static64.sh
NetData配合内存共享机制KSM使用(可选):
1
2
3
KSM是内核中的一种内存共享机制,在2.6.36版本的内核中开始引入,简单来说就是其会 合并某些相同的页面以减少页面冗余。
在内核中有一个KSM守护进程 ksmd,它定期扫描用户向它注册的内存区,寻找相同的页面,从而用一个添加写保护的页面来代替,
当有进程尝试写入的时候,会自动分配一个新页面,这点就是典型的COW机制。
假如脚本的历史输出信息,如果有这么一段:
1
2
3
4
5
6
7
8
9
10
11
Memory de-duplication instructions

You have kernel memory de-duper (called Kernel Same-page Merging,
or KSM) available, but it is not currently enabled.

To enable it run:

echo 1 >/sys/kernel/mm/ksm/run
echo 1000 >/sys/kernel/mm/ksm/sleep_millisecs

If you enable it, you will save 40-60% of netdata memory.
那么就说明你的系统有 KSM,但是未启用,按照这里说的执行这两句命令,即可开启 KSM,可以节省 40-60% 的储存空间。
1
2
echo 1 >/sys/kernel/mm/ksm/run
echo 1000 >/sys/kernel/mm/ksm/sleep_millisecs
片刻之后,在输出的末尾,您将看到以下消息:
1
2
3
4
5
6
7
8
Installer Output
. . .
^
|.-. .-. .-. .-. .-. . netdata .-. .-
| '-' '-' '-' '-' '-' is installed and running now! -' '-'
+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--->

enjoy real-time performance and health monitoring...
安装完之后,通过访问http://IP:19999访问调用相关服务,但是为了兼顾通过域名HTTPS的访问,下面给出Nginx反向代理的配置。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
server{
......
#80端口部分:Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
return 301 https://$host$request_uri;
......
#443端口部分,资源跨域的请求(非必需)和反向代理配置.
location / {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-
Control,Content-Type,Authorization';

if ($request_method = 'OPTIONS') {
return 204;
}
proxy_pass http://127.0.0.1:19999;
#Proxy Settings
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

}
NetData相关信息:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//NetData 的安装目录
守护进程 /usr/sbin/netdata
配置文件 /etc/netdata
网页文件 /usr/share/netdata
插件   /usr/libexec/netdata
数据文件 /var/lib/netdata
日志   /var/log/netdata
进程文件 /var/run/netdata.pid
日志管理 /etc/logrotate.d/netdata
//NetData 命令
查看帮助 netdata -h

#服务启动
systemctl start netdata
#服务关闭
systemctl stop netdata
#服务重启
systemctl restart netdata
假如需要更改默认端口,那么编辑配置文件/etc/netdata/netdata.conf,找到第51行的
1
# default port = 19999
去掉此行前面的#,然后更改成你想要的端口(防火墙需配合放行),接着执行如下命令,NetData 即会重启,使新配置生效。
1
2
3
killall netdata
service netdata start
#或者 systemctl netdata start
或许用不到,系统镜像的差异也会导致实际场景的不同,可能需要安装相关依赖(非必需):
1
2
yum install autoconf automake curl gcc git libmnl-devel libuuid-devel lm_sensors make MySQL-python nc pkgconfig 
python python-psycopg2 PyYAML zlib-devel

鸣谢:[NetData]一个超酷炫的Linux性能实时监控探针