
维护高性能数据库的一个关键方面是持续监控系统资源,因为系统上任何地方的任何问题都可能导致停机。有很多监控选项,所以重新发明轮子没有多大意义。为此,我选择了几个易于部署、可定制的选项,并且可以为我们提供有关 PostgreSQL 系统运行状况的所有相关信息。
本博客将重点介绍为 PostgreSQL 监控设置 Nagios,然后继续使用 Checkmk 进行增强。
监测方法
当我们谈论监控时,其中的一个关键部分是规划阶段。需要根据要监控的系统、可用资源和响应时间做出关键决策。
某些资源消耗可能是短暂的,而有些则可能并非如此。考虑一个在短时间内大量涉及 CPU 的查询,而不是一个随时间增长的表,现在导致填充磁盘上的所有可用空间。同样,有些问题可能需要 DBA 或系统管理员干预,而在某些情况下可能需要额外的硬件资源;例如,磁盘空间不足。
因此,规划资源监控,同时保持这些指标的正确性:
- 警告阈值,
- 关键通知阈值,
- 资源要求,
- 响应时间。
让我们来看看 Linux 上可用的一些易于部署的监控选项。本博客重点介绍在 RHEL/CentOS 7 系统上设置这些。
Nagios
Nagios可以加以不同意的发音,它还可以监控应用程序、服务、主机资源和硬件。这个开源项目实际上更名为 Nagios Core,但是,它仍然通常被称为 Nagios。使用 GPL 2.0 版许可证可在 git 上获得源代码。
Checkmk(校验码)
Checkmk 有多个版本,但是,我们只关注 Checkmk 原始版本;CRE,因为它是免费且 100% 开源的。Checkmk 通过提供更好的界面和许多插件来增强 Nagios,这些插件可以帮助更详细地监控系统和服务,而不会产生任何显着的开销。
设置 Nagios
设置和配置将在 RHEL/CentOS 7 的上下文中进行。为简单起见,我们将在同一系统上托管 nagios 和设置监控。如果您在 docker 环境中运行它,请记住以增强的权限运行它以允许 systemd 服务运行。
安装和配置 Nagios
以下命令可能会有所帮助。它将 docker 的 80 端口重定向到主机端口 8080:
docker run -t -d -u 0:0 --cap-add=NET_ADMIN -p 8080:80 --privileged=true centos:7 /usr/sbin/init
以下是安装步骤:
- 通过 /etc/selinux 下的配置文件或通过“setenforce 0”命令(如果可用)将 selinux 设置为许可模式。
- 安装 EPEL yum 存储库
- 安装 Nagios 及其插件
setenforce 0
yum install -y epel-release
yum install -y nagios nagios-plugins-all nagios-plugins-nrpe nrpe
安装完这些包及其依赖项后,是时候配置 Nagios 了。
- 为 nagiosadmin 用户设置密码
- 启用服务
- 启动服务
htpasswd -c /etc/nagios/passwd nagiosadmin
systemctl enable httpd nagios nrpe
systemctl start httpd
systemctl start nagios
systemctl start nrpe
完成这些步骤后,Nagios 启动并运行,可以通过浏览器访问:http://localhost/nagios/或在您的主机上(如果您正在运行 docker)访问:http://localhost:8080/nagios/
如果单击左侧菜单中的“Hosts”链接,您可以看到它已经在监控 localhost。现在 Nagios 可以运行了,让我们配置它来监控 PostgreSQL。
安装 PostgreSQL
我正在以 root 用户运行这些命令。但是,对于具有适当权限的非 root 用户,请在这些命令前加上“sudo”。
# Install the repository RPM:
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# Install PostgreSQL version 13:
yum install -y postgresql13-server
# Initialize the database, enable automatic start, and start the service:
/usr/pgsql-13/bin/postgresql-13-setup initdb
systemctl enable postgresql-13
systemctl start postgresql-13
服务器现已启动并正在运行。您可以通过“systemctl status postgresql-13”进行检查。
为 PostgreSQL 监控配置 Nagios
在文件 /etc/nagios/nagios.cfg 中添加以下行:“cfg_dir=/etc/nagios/conf.d”
让我们创建包含我们的配置文件的文件夹。Nagios 将加载此文件夹中以“.cfg”结尾的任何文件。
mkdir -p /etc/nagios/conf.d
让我们创建 PostgreSQL 监控配置文件:/etc/nagios/conf.d/postgresql.cfg
define hostgroup {
hostgroup_name pg-servers
alias PostgreSQL Servers Status
}
define host {
use generic-host
host_name pg-1
alias PostgreSQL Server 1
address 127.0.0.1
hostgroups pg-servers
max_check_attempts 10
check_command check-host-alive
}
define service {
use generic-service
hostgroup_name pg-servers
service_description Current Load
check_command check_nrpe_1arg!check_load
}
define service {
use generic-service
hostgroup_name pg-servers
service_description PostgreSQL Status
check_command check_pgsql
}
define command {
command_name check_nrpe_1arg
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
define command {
command_name check_pgsql
command_line $USER1$/check_pgsql -H '$HOSTADDRESS$' '$ARG1$'
}
现在是重启/重新加载 Nagios 服务的时候了:“systemctl reload nagios”
瞧,一切都完成了!咳咳,真的不是。我们还没有真正完成 PostgreSQL 配置以允许“nagios”用户访问 PostgreSQL 数据库。
为 Nagios 配置 PostgreSQL
在这种情况下,允许“nagios”用户访问数据库是一个非常简单的两步过程。让我们创建数据库用户“nagios”并授予其访问数据库的权限。
创建数据库用户:“/usr/pgsql-13/bin/createuser nagios”
在“pg_hba.conf”中添加条目:
“host all nagios 127.0.0.1/32 trust”
请注意,此条目必须位于为“nagios”用户定义 IPv4 连接的任何其他配置行之前。
重启 PostgreSQL 13 服务:“systemctl restart postgresql-13”。现在,一切都完成了。您可以通过 Nagios Web 界面监控服务的状态。

Nagios 监控界面
设置 Checkmk
虽然 Nagios 提供了一个非常基本的界面,但可以通过设置 Checkmk 对其进行显着改进。Checkmk 提供了详细的文档,但是,有几个步骤我遇到了问题,所以为了方便起见,我在这里分享这些。
您可以为 Redhat/CentOS 7 获取最新的 Checkmk Raw Edition (CRE) 安装 RPM 包:
https://checkmk.com/download?edition=cre&version=stable&dist=redhat&os=el7
您可以通过 yum 命令安装 RPM 包:
yum install -y https://download.checkmk.com/checkmk/2.0.0/check-mk-raw-2.0.0-el7-38.x86_64.rpm
安装软件包并且“omd”命令现在可用后,让我们创建监控站点:
omd create postgresql_mon
omd start postgresql_mon
接下来,我们需要设置代理。这是我遇到问题的地方。您可以通过 Checkmk URL 获取代理列表,后跟“/check_mk/agents/”:
“http://localhost:8080/postgresql_mon/check_mk/agents/”
您可以选择 noarch.rpm 包并安装它。接下来,让我们通过浏览到 Checkmk 的 PostgreSQL 插件:
“http://localhost:8080/postgresql_mon/check_mk/agents/plugins/”
您必须下载所需的插件并授予执行权限:“/usr/lib/check_mk_agent/plugins”。
完成所有这些后,您现在可以通过 Checkmk 浏览器界面继续设置主机。有关更多详细信息,请参阅此处提供的文档:https : //docs.checkmk.com/

Checkmk 监控接口
结语
这篇博客绝不是监控 PostgreSQL 的完整设置,但是,它为您提供了一个基本的入门设置。
Checkmk 增强了 nagios Web 界面,并通过其插件显着增强了默认的 PostgreSQL 监控,但是,您可能还想探索“check_postgres”工具。它是一个 perl 脚本,专门用于通过 Nagios、MRTG 或自定义监控脚本来监控 PostgreSQL。check_postgres 由 Burado 提供。它有大量的监控选项,可以在以下位置检查:https : //bucardo.org/check_postgres/check_postgres.pl.html
作者:Hamid Akhtar
Hamid 拥有超过 19 年的专业软件开发经验,现在已经参与 PostgreSQL 超过 8 年。他是 EnterpriseDB 的一员,负责管理 Windows、Linux 和 MacOS 的 PostgreSQL 官方安装程序。Hamid 最近加入 HighGo Software Inc.,担任高级 DevOps 和数据库架构师。

文章来源:https://www.highgo.ca/2021/03/15/monitoring-postgresql-with-nagios-and-checkmk/




