使用netdata进行PostgreSQL的实时监控,第二部分
在我之前写的关于netdata的文章中,我先试着让netdata运行起来了。
这次我会介绍如何正确使用netdata,并在文章中涉及到与PostgreSQL的集成部分。
关于netdata的自定义仪表板内容将在下一篇文章中介绍。
有关netdata环境搭建,请参考这里;有关PostgreSQL搭建,请参考这里。
环境
-
- CentOS 7.3
-
- PostgreSQL 9.6.1(RPMでインストール済み)
-
- netdata(インストール済み)
- VirtualBox 5.8.14
PostgreSQL和netdata的协作
1-1. 安装psycopg2库
如果已经安装了Netdata和PostgreSQL,你只需要做两件事。
- python-psycopg2のインストール
# yum install python-psycopg2
- pipでpsycopg2をインストール
# export PATH=/usr/pgsql-9.6/bin/:$PATH
# pip install psycopg2
注意:在使用pip进行安装时,需要将路径添加到pg_config中。
启动PostgreSQL和netdata。
如果netdata使用默认设置,只需启动即可。
但是,需要按照以下顺序启动:首先是PostgreSQL,然后是netdata。netdata在连接失败后不会重新连接。(可能是这样的)
# su - postgres
$ pg_ctl start
$ exit
# systemctl start netdata.service
我认为现在我们可以从netdata中查看PostgreSQL的信息了。
由于netdata在端口19999上运行,因此可以通过浏览器访问以下位置。
http://<IP地址>:19999/
右側的菜单中应该会增加一个名为“本地Postgres”的项目。选择它,就可以查看与PostgreSQL相关的信息,具体如下所示。

你觉得怎么样?可以很快地完成,同时也以不错的方式展示。
使用netdata监控的内容包括PostgreSQL。
在netdata中,能够获取和显示集群中每个数据库的以下信息。
-
- DBへの接続数
-
- タプルのスキャン量(スキャン種別)
-
- ロックの数
-
- インデックス数、トータルサイズ
-
- テーブル数、トータルサイズ
-
- WALのアーカイブ状況
- バックグラウンドライター
故障排除
如果您发现「PostgreSQL」的项目没有增加,请检查以下内容。这是一个简单的确认事项供您参考。
- トラシュー1:PostgreSQL、netdataは起動している?
首先,让我们使用以下命令来查看进程的状态。
# ps -ef | grep postgres
# systemctl status netdata.service
如果进程正在运行,请检查每个日志文件。
netdata的日志存储在/var/log/netdata/目录下。
- トラシュー2:PostgreSQLへの接続設定
如果与PostgreSQL的连接不成功,下一个可能性是更改了PostgreSQL的pg_hba.conf文件。如果PostgreSQL使用的端口已更改,netdata的默认设置无法连接。
在这种情况下,请重新编写netdata的连接配置文件。
tcpipv4:
name : 'local'
database : 'postgres'
user : 'postgres'
host : '127.0.0.1'
port : 5432
在默认设置中,netdata使用postgres用户并连接到postgres服务器,请适当进行修正。
另外,默认情况下除了上述的项目外,还启用了“socket”、“tcp”、“tcpipv6”,但仅保留tcpipv4项目并将其余项目禁用(至少在我的环境下)是没有问题的。
2. 自定义内容获取
这次只是试试看的话,我尝试让 netdata 可以获取使用 pgbench 的 “-P 1” 选项输出的每秒吞吐量。

只需要更改/usr/libexec/netdata/python.d/postgres.chart.py这个脚本,PostgreSQL就能从任意表中提取数据。
补充记载例子
如果要生成以上图表,只需在postgres.chart.py中添加以下内容即可:
先创建bench_score表,并将tps的值放入其中,然后netdata将为您将该值图形化。
20 BENCH = """
21 SELECT
22 tps
23 FROM
24 bench_score;
25 """
・・・
119 ORDER = ['bench_score','db_stat_transactions', 'db_stat_tuple_read', 'db_stat_tuple_returned', 'db_stat _tuple_write',
120 'backend_process', 'index_count', 'index_size', 'table_count', 'table_size', 'wal', 'backgroun d_writer']
・・・
122 CHARTS = {
123 'bench_score':{
124 'options':[None, 'pgbench TPS', 'tps', 'benchmark score', 'postgres.bench_score', 'line'],
125 'lines': [
126 ['bench_tps', 'tps', 'absolute']
127 ]},
・・・
317 def add_stats(self, cursor):
318 self.add_bench_stats(cursor)
・・・
333 def add_bench_stats(self, cursor):
334 cursor.execute(BENCH)
335 temp = cursor.fetchone()
336 self.data['bench_tps'] = int(temp.get('tps',0))
附言:netdata插件的设置
为了让Netdata原生支持与各种中间件的集成,它提供了多种脚本,如针对mysql、apache以及其他各种Python脚本。这些脚本默认是启用的。如果不需要的话,我们应该将不需要的部分取消注释,并将其更改为“off”。
否则,Netdata的日志会充满错误信息。
・・・
mysql: no
postgresql: yes
nginx: no
・・・
最后
现在可以与PostgreSQL进行连接了。
但是,显示的内容太多了,很难找到想看的信息… 而且如果使用多台服务器怎么办… 这个使用起来不太方便。
因此,我們下次將整理一篇文章,介紹如何建立自定義儀表板以「僅查看所需的資訊」和「查看遠程資訊」。