炫酷的Linux服务器监控 Netdata 安装

Netdata feature

Github上能够看到netdata的主要功能,主要有几点(详细的可查看github上的说明):

  1. interactive bootstrap dashboards, 酷炫(主要是dark主题,light主题就没这感觉了)
  2. 匪夷所思的快。。。所有请求每个metreic都在0.5ms内响应,即便是一台烂机器
  3. 非常高效,每秒采集数千个指标,但仅占cpu单核1%,少量MB的内存以及完全没有磁盘IO
  4. 提供复杂的、各种类型的告警,支持动态阈值、告警模板、多种通知方式等
  5. 可扩展,使用自带的插件API(比如bash, python, perl, node.js, java, go, ruby等)来收集任何可以衡量的数据
  6. 零配置:安装后netdata会自动的监测一切
  7. 零依赖:netdata有自己的web server, 提供静态web文件和web API
  8. 零维护:只管跑上!
  9. 支撑多种时间序列后端服务,比如graphite, opentsdb, prometheus, json document DBs

Netdata监控项也很多,比如CPU, 内存,磁盘,网络这些基础的之外,还可以有IPC, netfilter/iptables Linux firewall, fping, Processes, NFS, Network QoS, Applications, Apache web server, Nginx, Tomcat, mysql, postgres, redis, mongodb, elasticsearch, SNMP devices等等。

Netdata install

Netdata的安装非常简单,支持几乎所有的Linux版本。刚好我还有一个用于来科学上网的EC2机器是Unbutu系统,果断登上去尝试。

安装准备

Netdata提供了一个非常简便的安装方法,我的Unbutu系统只需要执行下面的命令即可完成安装netdata所依赖的各种东西:

curl <span class="hljs-attribute">-Ss</span> <span class="hljs-string">'https://raw.githubusercontent.com/firehol/netdata-demo-site/master/install-required-packages.sh'</span> <span class="hljs-subst">></span>/tmp/kickstart<span class="hljs-built_in">.</span>sh <span class="hljs-subst">&&</span> bash /tmp/kickstart<span class="hljs-built_in">.</span>sh <span class="hljs-attribute">-i</span> netdata
  • 1

注意,上面的命令是安装基本的部分,不包括mysql / mariadb, postgres, named, hardware sensors and SNMP. 如果要完整安装,则需要执行下面的命令:

curl <span class="hljs-attribute">-Ss</span> <span class="hljs-string">'https://raw.githubusercontent.com/firehol/netdata-demo-site/master/install-required-packages.sh'</span> <span class="hljs-subst">></span>/tmp/kickstart<span class="hljs-built_in">.</span>sh <span class="hljs-subst">&&</span> bash /tmp/kickstart<span class="hljs-built_in">.</span>sh <span class="hljs-attribute">-i</span> netdata<span class="hljs-attribute">-all</span>
  • 1

安装Netdata

安装Netdata也很简单,按照wiki的说明即可:

<span class="hljs-preprocessor"># download it - the directory 'netdata' will be created</span>
git clone https:<span class="hljs-comment">//github.com/firehol/netdata.git --depth=1</span>
cd netdata

<span class="hljs-preprocessor"># run script with root privileges to build, install, start netdata</span>
./netdata-installer.sh

注意上面要使用root权限,执行命令后的提示信息也很丰富有趣,比如刚开头是这样的:

$ sudo ./netdata-installer.sh 

  ^
  |.-.   .-.   .-.   .-.   .  netdata                                        
  |   <span class="hljs-string">'-'</span>   <span class="hljs-string">'-'</span>   <span class="hljs-string">'-'</span>   <span class="hljs-string">'-'</span>   real-<span class="hljs-built_in">time</span> performance monitoring, done <span class="hljs-constant">right</span>!  
  +<span class="hljs-comment">----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+---></span>


  You are about <span class="hljs-built_in">to</span> build <span class="hljs-operator">and</span> install netdata <span class="hljs-built_in">to</span> your <span class="hljs-keyword">system</span>.

  It will be installed <span class="hljs-keyword">at</span> these locations:

   - <span class="hljs-operator">the</span> daemon     <span class="hljs-keyword">at</span> /usr/sbin/netdata
   - config <span class="hljs-built_in">files</span>   <span class="hljs-operator">in</span> /etc/netdata
   - web <span class="hljs-built_in">files</span>      <span class="hljs-operator">in</span> /usr/share/netdata
   - plugins        <span class="hljs-operator">in</span> /usr/libexec/netdata
   - cache <span class="hljs-built_in">files</span>    <span class="hljs-operator">in</span> /var/cache/netdata
   - db <span class="hljs-built_in">files</span>       <span class="hljs-operator">in</span> /var/lib/netdata
   - <span class="hljs-built_in">log</span> <span class="hljs-built_in">files</span>      <span class="hljs-operator">in</span> /var/<span class="hljs-built_in">log</span>/netdata
   - pid <span class="hljs-built_in">file</span>       <span class="hljs-keyword">at</span> /var/run/netdata.pid
   - logrotate <span class="hljs-built_in">file</span> <span class="hljs-keyword">at</span> /etc/logrotate.d/netdata

  This installer allows you <span class="hljs-built_in">to</span> change <span class="hljs-operator">the</span> installation path.
  Press Control-C <span class="hljs-operator">and</span> run <span class="hljs-operator">the</span> same <span class="hljs-command"><span class="hljs-keyword">command</span> <span class="hljs-title">with</span> --<span class="hljs-title">help</span> <span class="hljs-title">for</span> <span class="hljs-title">help</span>.</span>

安装结束的最后几行是这样的:

Uninstall script generated: ./netdata-uninstaller.sh
<span class="hljs-operator"><span class="hljs-keyword">Update</span> script generated   : ./netdata-updater.sh

netdata-updater.sh can <span class="hljs-keyword">work</span> <span class="hljs-keyword">from</span> cron. It will <span class="hljs-keyword">trigger</span> an email <span class="hljs-keyword">from</span> cron
<span class="hljs-keyword">only</span> <span class="hljs-keyword">if</span> it fails (it does <span class="hljs-keyword">not</span> print anything <span class="hljs-keyword">if</span> it can <span class="hljs-keyword">update</span> netdata).
Run this <span class="hljs-keyword">to</span> automatically <span class="hljs-keyword">check</span> <span class="hljs-keyword">and</span> install netdata updates once per <span class="hljs-keyword">day</span>:

ln -s /home/ubuntu/netdata/netdata-updater.sh /etc/cron.daily/netdata-updater.sh

 --- We <span class="hljs-keyword">are</span> done! --- 

  ^
  |.-.   .-.   .-.   .-.   .-.   .  netdata                          .-.   .-
  |   <span class="hljs-string">'-'</span>   <span class="hljs-string">'-'</span>   <span class="hljs-string">'-'</span>   <span class="hljs-string">'-'</span>   <span class="hljs-string">'-'</span>   <span class="hljs-keyword">is</span> installed <span class="hljs-keyword">and</span> running now!  -<span class="hljs-string">'   '</span>-<span class="hljs-string">'  
  +----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--->

  enjoy real-time performance and health monitoring...</span></span>

安装完后,还可以根据wiki所说的配置开机启动,照做之后执行service netdata start启动服务,可以访问http://localhost:19999/ 看到监控界面。随后去AWS控制台放通19999端口,我的EC2机器的监控系统就大功告成啦!

由此看出,Netdata的安装非常之简单,只有几行命令,而且根本无需配置。

监控页面

再来看看监控页面,除了配色酷炫,监控项种类繁多之外,页面元素的实时响应、告警设置等都极具亮点。为了更好的展示页面,在这里会盗用github上netdata官方的几个动态图来show一下.

System overview

System overview

Disks

Disks

Network interfaces

Network

Alarms

Alarms

Netdata backend

Netdata也可以后台服务收集监控指标,多服务器的监控指标汇总到前台展示,或者归档汇总后提供给其他工具如grafana, 如下图:

netdata backend

Netdata支持如下几个backends:

  • 1) graphite;
  • 2) opentsdb;
  • 3) json document DBs.

并能够提供3种计算模式:

  • 1) as collected;
  • 2)average;
  • 3) sum or volume。

具体的可以到netdata wiki查看。利用这种方式,应该也较容易能够折腾出来一个集群监控的解决方案,并且netdata和grafana的界面看起来都非常的酷炫(又一次印证了一个观点:大屏监控系统就得是暗色系!)

看到roadmap里面提到:monitor more applications (hadoop and friends, postgres, etc). 也希望hadoop这方面的监控能早日实现,又可以多一个可选方案啦~

 

卸载

# 找到卸载脚本位置(我的在/usr/src/netdata.git)
whereis netdata.git
#  进入那个位置
cd /usr/src/netdata.git
# 开始卸载
yes | sudo ./netdata-uninstaller.sh --force
Momostudent
Momostudent
因为喜欢所以折腾。。。