这份文档是根据netdata的wiki逐步完成的一份记录,如果出现命令错误或者过时等问题,可以移至netdata的wiki,根据指导完成操作。
netdata wiki - install

1. 准备工作

  • 一台联网的centos7主机

  • 安装环境

    1
    yum install autoconf automake curl gcc git libmnl-devel libuuid-devel lm_sensors make MySQL-python nc pkgconfig python python-psycopg2 PyYAML zlib-devel -y

2. 下载项目

1
2
3
4
5
6
7
# 使用git将含安装脚本的项目下至本地  
# git clone https://github.com/netdata/netdata.git --depth=1
# 使用该命令之后会下载一个 netdata 文件夹
# 所以请确保当前的路径没有名为 netdata 的文件或文件夹
# 或者使用git命令指向指定的文件夹。
git clone https://github.com/netdata/netdata.git --depth=1 ~/netdata/
# 需要注意的是,如果自己指定了目录,则不会生成名为netdata的文件夹,所以要自己指定一个文件夹。

3.安装项目

1
2
3
4
5
6
7
8
9
# 因为是自带了安装脚本,所以直接执行脚本就可以完成安装
# 不要需要注意的是,默认的安装路径稍微有点坑,所以需要在安装的时候指定安装路径
# 这里假定我的git clone位置为`~/netdata/`
# 这里指定安装到/usr/local,因为脚本,安装路径会变成/usr/local/netdata/
# 安装期间也会输出安装路径让用户进行确认,确认无误后回车即可继续
# eg:Press ENTER to build and install netdata to '/usr/local/netdata' >
~/netdata/netdata-installer.sh --install /usr/local
# 如果不想在安装完成之后自启动,可以增加 --dont-start-it
# ~/netdata/netdata-installer.sh --install /usr/local --dont-start-it

4.设置为服务并自启动

如果每次重新启动服务器之后都需要进入/usr/sbin开启netdata的话,明显和我们的使用习惯不大相同,所以我们需要将他注册成服务,并设置为开机自启动模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 先粗暴的关闭netdata
killall netdata
# 拷贝服务文件
cp ~/netdata/system/netdata.service /etc/systemd/system/
# 重新加载服务列表
systemctl daemon-reload
# 允许开启netdata服务
systemctl enable netdata
# 启动服务
systemctl start netdata
# 复制自启动脚本
cp ~/netdata/system/netdata-init-d /etc/init.d/netdata
# 增加脚本可执行权限
chmod +x /etc/init.d/netdata
# 设置服务自启
chkconfig --add netdata

5.测试访问

默认的端口是19999,在浏览器中输入http://[centos ip]:19999即可访问,如果出现服务器阻止访问,则需要在防火墙开启19999的端口的tcp协议,如下:

1
2
3
4
# 永久开放端口19999
firewall-cmd --zone=public --add-port=19999/tcp --permanent
# 重新装载防火墙规则
firewall-cmd --reload

6.增加权限认证

如果是带公网ip的服务器,且需要将该页面放在公网上方便访问,则需要对访问的权限做验证,
netdata的设计理念是分布式的服务器监控,那么每个服务器都有自己的子页面,那么每个页面都有一个权限验证是不可能的,
加之因为登陆信息不共通,那么每个页面都要重复登陆,这不符合常理,
所以官方提倡我们外部使用其他服务器对netdata的访问做反向代理并做权限验证。
这里我推荐使用使用nginx做反向代理和权限验证
一是nginx可以只用配置文件就达到目的,
完全不用管源码,上手门槛低,且功能强大;
二是因为nginx性能损耗低,功能强大,毕竟一个性能监控没必要浪费过多的性能;
三是扩展性良好,直接在配置文件加上另一个服务器的ip和端口就行了,方便维护;

这里呢,我们采用源码安装nginx
首先,在github上面下载最新的源代码,我这里是下载了nginx-1.15.5 的版本。

1
2
3
4
5
6
7
8
9
10
11
12
13
# 把压缩包下载到~
wget -P ~ http://nginx.org/download/nginx-1.15.5.tar.gz
# 解压
tar -zxvf nginx-1.15.5.tar.gz
# 安装编译所需环境
yum -y install openssl openssl-devel
# 编译并指定安装到/usr/local/nginx
# 这一步并不会安装
./nginx-1.15.5/.configure --prefix=/usr/local/nginx
# 安装
make && make install
# 修改配置文件
vi /usr/local/nginx/conf/nginx.conf

修改代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
http {
# 以上无关省略...

# netdata服务器位置
# 因为我都是放在同一台服务器,所以直接用localhost
# 如果需要引入外部的服务器,需要在服务器上开放19999端口
# 并限制只有nginx服务器的ip才能访问
upstream netdataServer {
server localhost:19999;
keepalive 64;
}

server{
# nginx端口自己定,建议不要使用80和19999
listen 8099;
server_name localhost;

# 权限验证部分,指定身份验证文件,后面会提到如何创建
auth_basic "Restricted Access";
auth_basic_user_file /usr/local/nginx/conf/htpasswd.users;

#这里如果有多个服务器可以用?<xxx>代指不同服务器
location ~ /netdata/(?<ndpath>.*) {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_pass_request_headers on;
proxy_set_header Connection "keep-alive";
proxy_store off;
# 这里也要改为$xxx
proxy_pass http://netdataServer/$ndpath$is_args$args;
gzip on;
gzip_proxied any;
gzip_types *;
}
}
#以下无关省略...
}

修改完还没结束,需要开放端口和创建身份验证的文件

1
2
3
4
5
6
7
8
# 开放端口,这里改为你自己的nginx监听的端口
firewall-cmd --zone=public --add-port=8099/tcp --permanent
# 下载工具
yum install -y httpd-tools
# 生成身份验证文件
htpasswd -bc /usr/local/nginx/conf/htpasswd.users username password
# 启动nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf