Netdata入门
一、项目环境
- 系统:CentOS Linux release 7.8.2003 (Core)
- 官方说明文档:https://learn.netdata.cloud/docs/agent
二、NetData简介
NetData 是一个用于系统和应用的分布式实时性能和健康监控工具。它提供了对系统中实时发生的所有事情的全面检测。你可以在高度互动的 Web 仪表板中查看结果。使用 Netdata,你可以清楚地了解现在发生的事情,以及之前系统和应用中发生的事情。你无需成为专家即可在 Linux 系统中部署此工具。NetData 开箱即用,零配置、零依赖。只需安装它然后坐等,之后 NetData 将负责其余部分。
三、NetData安装
- 方法一
Netdata最简单的一种安装方式就是直接使用官方的脚本进行一键安装
bash <(curl -Ss https://my-netdata.io/kickstart.sh)
# Ubuntu的包管理器不确定有没有 sudo apt-get install netdata
这时我们只需要打开http://localhost:19999/
就可以看到NetData的默认界面了
[注]: NetData有汉化版,但是是第三方的包,出于安全考虑还是用官方的。
https://github.com/firehol/netdata (原版)
https://github.com/Fhaohaizi/netdata (汉化版本)
https://github.com/jasoncheng7115/netdata-cpatch (繁体汉化补丁[自行转简体]:html、js)
- 方法二
方法一无法安装的时候可以此方法来安装
# 克隆NetData的git仓库
git clone https://github.com/netdata/netdata.git
# 进入netdata目录
cd netdata/
# 执行安装脚本
./netdata-installer.sh
- 方法三
如果上述方法安装不成功,可以使用下面的方法来安装
# 下载netdata的run包
wget https://github.com/netdata/netdata/releases/download/v1.24.0/netdata-v1.24.0.gz.run
# 运行安装包
./netdata-v1.24.0.gz.run
四、NetData的基本操作
# 启动NetData服务,并设置开机启动
sudo systemctl enable netdata
sudo systemctl start netdata
# 重启服务
sudo systemctl restart netdata
# 停止NetData服务
sudo systemctl stop netdata
# 更新NetData服务(重新拉取,重新运行)
cd netdata
git pull
sudo ./netdata-installer.sh
五、卸载NetData
我们独立的卸载程序能够删除由Shell安装程序创建的Netdata安装。它不需要运行任何其他Netdata存储库文件。它所需要的只是一个.environment
文件,该文件是在安装过程中创建的(使用Shell默认安装程序)并放入${NETDATA_USER_CONFIG_DIR}/.environment
(默认情况下/etc/netdata/.environment
)。该文件包含一些传递给我们的安装程序的参数,这些参数在卸载过程中是必需的。主要需要两个参数:
NETDATA_PREFIX
NETDATA_ADDED_TO_GROUPS
卸载工作流程如下所示:
查找您的
.environment
文件,这通常/etc/netdata/.environment
是默认安装。 如果找不到该文件并想要卸载Netdata,则创建一个具有以下内容的新文件:
NETDATA_PREFIX = "<安装前缀>" # 将您用作参数的参数放置到shell已安装的--install标志中。否则应为空
NETDATA_ADDED_TO_GROUPS ="<其他组>" # 运行Netdata进程的用户的其他组
- 运行
netdata-uninstaller.sh
如下:
$ {NETDATA_PREFIX} /usr/libexec/netdata/netdata-uninstaller.sh --yes --env <environment_file>
如果没有文件,现有安装可能仍需要下载文件。要在这种情况下执行卸载,请运行以下命令:
wget https://raw.githubusercontent.com/netdata/netdata/master/packaging/installer/netdata-uninstaller.sh
chmod + x ./netdata-uninstaller.sh
./netdata-uninstaller.sh --yes --env <environment_file>
默认environment_file
值为/etc/netdata/.environment
此卸载方法假定以前使用netdata-installer.sh
或kickstart脚本进行安装。当前由软件包管理器安装Netdata时使用它可能会起作用或导致意外结果。例如是使用docker进行安装。
执行删除命令的过程中,它会让你确认有些文件是否需要删除,一般情况下,一路确定就可以了。
五、NetData的相关配置文件
NetData的核心配置可以通过cat /etc/netdata/netdata.conf
或者http://127.0.0.1:19999/netdata.conf
查看。
上图矩形框部分内的为NetData的主要配置文件路径
如果觉得默认的仪表盘展示的图表太多,可以vim /etc/netdata/netdata.conf
或者nano /etc/netdata/netdata.conf
,修改[plugins]
中的配置。原配置文件中大部分默认开启的,如果我们不需要某些图表的话,可以将注释去掉,改为no。然后重启服务,就可以禁用相应的图表。
禁用效果:
如果觉得NetData占用的内存过大,也可以修改核心配置中的数据刷新率,来降低内存占用
# 降低cpu占用:
# 编辑:vim netdata.conf
[global]
update every = 2
# 或者只修改apps部分:
[plugin:apps]
update every = 2
六、添加第三方扩展插件(NVIDIA-SMI)
可查官方文档来添加,例如监控mysql之类的,NVIDIA显卡之类的
[官方文档]: https://learn.netdata.cloud/docs/agent/collectors/python.d.plugin/
七、多设备监控
- 方法一
[官方文档]:https://learn.netdata.cloud/docs/agent/step-by-step/step-03
使用官方提供的平台NetData Cloud
点击左上角的加号,即可进入官方平台
通过邮箱或github账号,将设备与账号进行绑定。当我们使用平台绑定多个设备之后,就可以将多个设备的数据汇总到平台中进行浏览。
[注]:虽然在官方文档中,作者一再强调,他们只会存储账号和绑定关系,但是仍然无法确定是否会发送服务器的状态给到其他人
- 方法二
可以使用为需要监控的服务器建立主从关系,将其他服务器的数据同一汇总到一台服务器进行浏览
节点服务器
修改netdata.conf中的如下配置:
[global]
memory mode = none # 在此主机上禁用数据库。这也会禁用运行状况监视(没有数据库就无法进行运行状况监视)
hostname = chenshaolang-MS-7817 # 修改配置名称
[web]
mode = none # 禁用API(Netdata不会监听任何端口)。这也会禁用注册表(没有API的注册表将无法使用)。
同时在同一目录下新建stream.conf并写入如下配置:
[stream]
enabled = yes
destination = 127.0.0.1:19999 # 主服务器的ip地址
api key = 733d1bb7-91b1-4bcf-9a45-66ec2340316e
# api key是一个uuid格式的字符串,可以使用uuidgen命令生成。主要是提供给主服务器使用
重启服务:
systemctl restart netdata
主服务器
在netdata.conf的同一目录下新建stream.conf并写入如下配置:
[733d1bb7-91b1-4bcf-9a45-66ec2340316e] # 刚才节点服务器生成的api key
enabled = yes
default history = 3600
default memory mode = save
health enabled by default = auto
allow from = * # allow from可以设置数据流的允许来源以保证安全。如 allow from = 127.0.0.1 仅允许该ip连接
[注]:如果有多个节点服务器,则一起写在stream.conf里面
重启服务:
systemctl restart netdata
配置完后,我们就可以直接在主服务器上直接浏览所有节点服务器的情况了
八、报警器
[官方文档]:https://learn.netdata.cloud/docs/agent/step-by-step/step-05
事实上在我们安装好NetData时,官方就已经为我们预设了很多的报警器。我们直接点击上方的小铃铛
就可以进入
同时它会定时记录每个时间段服务器的状况,并声称快照。当发现警报时,可以通过log选项
查阅历史,点击直接进入放生警报时服务器的状态。
[注]: 但是这个功能需要登录他们的平台才能跳转,或者将数据存入数据库或者其他第三方监控软件。如Graphite,OpenTSDB,Prometheus,AWS Kinesis Data Streams,MongoDB
九、将监控数据存入后端
[官方文档]:https://learn.netdata.cloud/docs/agent/step-by-step/step-09
# 首先先安装数据库
# 配置yum源
cat > /etc/yum.repos.d/MongoDB.repo <<EOF
[mongodb-org-3.6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
EOF
# 安装
yum -y install mongodb-org
# 创建数据目录
mkdir -p /data/mongodb/data /data/mongodb/logs
chown mongod.mongod /data/mongodb/data /data/mongodb/logs -R
vim /etc/mongod.conf
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# Where and how to store data.
storage:
dbPath: /data/mongodb/data
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
timeZoneInfo: /usr/share/zoneinfo
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1 # Listen to local interface only, comment to listen on all interfaces.
# 在数据库中新建一个名叫netdata的数据库
use netdata
# 并在里面创建一张名叫netdata_metrics的表
db.createCollection("netdata_metrics")
接着Netdata配置目录中,运行sudo ./edit-config mongodb.conf
并设置MongoDB URI,数据库名称和集合名称
然后重新启动NetData以启用MongoDB后端,当出现下面画面就表示配置成功,已经将数据存储进mongodb中
十、 创建自定义监控界面
[官方文档]:https://learn.netdata.cloud/docs/agent/step-by-step/step-08#why-should-i-create-a-custom-dashboard
NetData
除了可以在默认的界面上进行相关图表的删除的添加之外,还支持自定义页面
首先 我们在目录/usr/share/netdata/web
下创建也页面custom-dashboard.html
<!DOCTYPE html>
<html lang="en">
<head>
<title>My custom dashboard</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<script>
var netdataTheme = 'slate';
</script>
<!-- 添加dashboard.js,这样才能使用NetData的图表 -->
<script type="text/javascript" src="dashboard.js"></script>
<style>
.wrap {
max-width: 1280px;
margin: 0 auto;
}
h1 {
margin-bottom: 30px;
text-align: center;
}
.charts {
display: flex;
flex-flow: row wrap;
justify-content: space-around;
}
.charts > div {
margin-bottom: 6rem;
position: relative;
}
</style>
</head>
<body>
<main class="wrap">
<h1>My custom dashboard</h1>
<div class="charts">
<!-- 添加相关图表格 -->
<div data-netdata="system.cpu"
data-after="-300"
data-height="250px"
data-width="calc(50% - 2rem)"></div>
<div data-netdata="apps.cpu"
data-after="-300"
data-height="250px"
data-width="calc(50% - 2rem)"></div>
<div data-netdata="groups.cpu"
data-after="-300"
data-height="250px"
data-width="calc(50% - 2rem)"></div>
<div data-netdata="users.cpu"
data-after="-300"
data-height="250px"
data-width="calc(50% - 2rem)"></div>
</div>
</main>
</body>
</html>
然后修改这个页面文件的权限,使NetData
有权限去直接访问它
chown netdata:netdata /usr/share/netdata/web/custom-dashboard.html
配置完后,就可以直接使用http://127.0.0.1:19999/custom-dashboard.html
进行登录查看
十一、 使用Nginx配置域名访问,设置账号密码授权
由于netdata没有帐号密码体系,为保护服务器隐私,我们要使用nginx反向代理配置域名访问,并使用账号密码授权。
生成Nginx密码文件
# 密码文件存放位置自定义,路径需记录下来,放在Nginx配置中。
➜ printf "netdata:$(openssl passwd -apr1)" > /usr/local/nginx/conf/htpasswd
配置nginx.conf
upstream backend {
# the netdata server,请修改具体端口号
server 127.0.0.1:19999;
keepalive 64;
}
server {
# nginx listens to this
listen 80;
# the virtual host name of this,请求改具体域名
server_name netdata.example.com;
# auth password
auth_basic "netdata Login";
# 上一步生成的密码文件路径
auth_basic_user_file /usr/local/nginx/conf/htpasswd;
location / {
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_pass http://backend;
proxy_http_version 1.1;
proxy_pass_request_headers on;
proxy_set_header Connection "keep-alive";
proxy_store off;
}
}
重启nginx
systemctl reload nginx
重启Nginx后,可以直接通过域名netdata.example.com
访问,并且需要输入账号和密码。但是依然可以通过http://ip:port
的方式来访问
NetData禁用外部IP请求
打开NetData配置文件:/etc/netdata/netdata.conf
,web项的 bind to
修改如下:
[web]
bind to = 127.0.0.1 ::1
重启NetData: systemctl restart netdata
转载请注明来源