想打造 New Relic 那样漂亮的实时监控系统咱们只须要 InfluxDB/collectd/Grafana 这三个工具,这三个工具的关系是这样的:前端
采集数据(collectd)-> 存储数据(InfluxDB) -> 显示数据(Grafana)。python
下面的安装和配置步骤在 Ubuntu 14.04 Server 64bit 版上完成。升级整个系统后重启:linux
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo reboot
InfluxDB 是 Go 写的,不依赖任何其余包或库,很干净。安装很容易:git
$ wget https://s3.amazonaws.com/influxdb/influxdb_latest_amd64.deb
$ sudo dpkg -i influxdb_latest_amd64.deb
启动 InfluxDB:github
$ sudo /etc/init.d/influxdb start
Setting ulimit -n 65536
Starting the process influxdb [ OK ]
influxdb process was started [ OK ]
启动后打开 web 管理界面 http://192.168.2.183:8083/ 默认用户名和密码是 root 和 root. InfluxDB 的 Web 管理界面端口是 8083,HTTP API 监听端口是 8086,若是须要更改这些默认设定,修改 InfluxDB 的配置文件 /opt/influxdb/current/config.toml 后重启 InfluxDB 就能够了。web
在刚安装好的 InfluxDB 上建立一个名为 collectd 的数据库,能够用命令行建立,也能够用 Web 管理界面操做:数据库
$ curl "http://192.168.2.183:8086/db?u=root&p=root"-d "{\"name\": \"collectd\"}"
安装 collectd:api
$ sudo apt-get install collectd
配置 collectd 为客户端,收集到数据后直接发给 InfluxDB:浏览器
$ sudo vi /etc/collectd/collectd.conf
...
LoadPlugin network
...
<Plugin network>
Server"192.168.2.183""25826"
</Plugin>
...
重启 collectd:服务器
$ sudo /etc/init.d/collectd restart
InfluxDB 如今自带一个 collectd 插件来获取 collectd 客户端发来的数据,之前可没这么方便哦,0.8.4 版本之前只能经过 influxdb-collectd-proxy 这样的第三方程序来链接 collectd 和 InfluxDB. 若是你检查一下服务器上打开的端口就会发现 influxdb 插件启动了一个 25826 端口,若是发现 InfluxDB 数据库里没有(收集到)数据,务必检查这个 25826 端口是否正常启动了:
$ sudo netstat -tupln
ActiveInternet connections (only servers)
ProtoRecv-Q Send-Q LocalAddressForeignAddressState PID/Program name
tcp 000.0.0.0:220.0.0.0:* LISTEN 622/sshd
tcp6 00:::8086:::* LISTEN 668/influxdb
tcp6 00:::22:::* LISTEN 622/sshd
tcp6 00:::8090:::* LISTEN 668/influxdb
tcp6 00:::8099:::* LISTEN 668/influxdb
tcp6 00:::8083:::* LISTEN 668/influxdb
udp6 00:::25826:::*668/influxdb
InfluxDB 自带的 collectd 插件默认是关闭的,须要手动配置打开 enabled = true,并填上 database = “collectd” 这一行,这里的 “collectd” 就是咱们上面建立的那个数据库,更改配置后记得重启 InfluxDB:
$ sudo vi /opt/influxdb/current/config.toml
$ sudo vi /opt/influxdb/shared/config.toml
...
# Configure the collectd api
[input_plugins.collectd]
enabled =true
# address = "0.0.0.0" # If not set, is actually set to bind-address.
# port = 25826
database ="collectd"
# types.db can be found in a collectd installation or on github:
# https://github.com/collectd/collectd/blob/master/src/types.db
# typesdb = "/usr/share/collectd/types.db" # The path to the collectd types.db file
...
$ sudo /etc/init.d/influxdb restart
Setting ulimit -n 65536
Setting ulimit -n 65536
influxdb process was stopped [ OK ]
Setting ulimit -n 65536
Starting the process influxdb [ OK ]
influxdb process was started [ OK ]
如今 InfluxDB 已经准备好接受和处理 collectd 传来的数据了。用命令行或者 Web 管理界面验证一下数据库里是否有数据:
$ curl -G 'http://192.168.2.183:8086/db/collectd/series?u=root&p=root&q=list+series&pretty=true'
[
{
"name":"list_series_result",
"columns":[
"time",
"name"
],
"points":[
[
0,
"192.168.2.183/cpu-0/cpu-idle"
],
...
]
}
]
下载 grafana 后解压放到 web 服务器上就可用。这里省去配置 Nginx/Apache 之类的麻烦,直接用最简单的 Web 服务器 python -m SimpleHTTPServer 驱动:
$ wget http://grafanarel.s3.amazonaws.com/grafana-1.9.1.tar.gz
$ tar xzvf grafana-1.9.1.tar.gz
$ cd grafana-1.9.1.tar.gz
$ cp config.sample.js config.js
$ vi config.js
...
// InfluxDB example setup (the InfluxDB databases specified need to exist)
datasources:{
influxdb:{
type:'influxdb',
url:"http://192.168.2.183:8086/db/collectd",
username:'root',
password:'root',
},
...
},
...
$ sudo python -m SimpleHTTPServer
用浏览器访问 Grafana,这里的默认端口是 8000: