使用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_postgres-org.PNG

你觉得怎么样?可以很快地完成,同时也以不错的方式展示。

使用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” 选项输出的每秒吞吐量。

netdata_pgbench.PNG

只需要更改/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进行连接了。
但是,显示的内容太多了,很难找到想看的信息… 而且如果使用多台服务器怎么办… 这个使用起来不太方便。

因此,我們下次將整理一篇文章,介紹如何建立自定義儀表板以「僅查看所需的資訊」和「查看遠程資訊」。

广告
将在 10 秒后关闭
bannerAds