TranslateProject/translated/tech/20150601 How to monitor common services with Nagios.md
2015-06-01 21:44:54 +08:00

269 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

如何用Nagios监控服务
================================================================================
Nagios内置了很多脚本来监控服务。本篇会使用其中一些来检查通用服务如MySql、Apache、DNS等等。
为了保证本篇集中在系统监控我们不会配置hostgroup或者模板它们已经在 [前面的教程][1]中覆盖了,它们可以满足这些条件了。
### 在命令行中运行Nagios ###
通常建议在添加到Nagios前现在命令行中运行Nagios服务检测脚本。它会给出执行是否成功以及脚本的输出将会看上去的样子。
这些脚本存储在 /etc/nagios-plugins/config/ ,可执行文件在 /usr/lib/nagios/plugins/。
下面就是该怎么做
root@nagios:~# cd /etc/nagios-plugins/config/
提供的脚本包含了语法帮助。示例包含了部分输出。
root@nagios:~# cat /etc/nagios-plugins/config/tcp_udp.cfg
----------
# 'check_tcp' command definition
define command{
command_name check_tcp
command_line /usr/lib/nagios/plugins/check_tcp -H '$HOSTADDRESS$' -p '$ARG1$'
了解了语法TCP 80端口可以用下面的方法检查。
root@nagios:~# /usr/lib/nagios/plugins/check_tcp -H 10.10.10.1 -p 80
----------
TCP OK - 0.000 second response time on port 80|time=0.000222s;;;0.000000;10.000000
### 示例拓扑 ###
本片中使用下面三台服务器。每台服务器运行多个通用服务。Nagios服务器现在运行的是Ubuntu。
- Server 1 (10.10.10.1) : MySQL, Apache2
- Server 2 (10.10.10.2) : Postfix, Apache2
- Server 3 (10.10.10.3): DNS
首先服务器被定义在了Nagios中。
root@nagios:~# vim /etc/nagios3/conf.d/example.cfg
----------
define host{
use generic-host
host_name test-server-1
alias test-server-1
address 10.10.10.1
}
define host{
use generic-host
host_name test-server-2
alias test-server-2
address 10.10.10.2
}
define host{
use generic-host
host_name test-server-3
alias test-server-3
address 10.10.10.3
}
### 监控MySQL服务 ###
#### MySQL 监控需要 ####
- 通过检查3306端口来检测MySQL是否运行中。
- 检测特定的数据库'testDB'是否可用。
#### MySQL 服务器设置 ####
开始检测MySQL时需要记住MySQL默认只监听回环接口127.0.0.1。这增加了数据库的安全。手动调节需要告诉MySQL该监听什么其他接口。下面是该怎么做。
这个设置在所有的MySQL服务器上已经做了。
root@nagios:~# vim /etc/mysql/my.cnf
下面这行被注释掉了来监听所有接口。
#bind-address = 127.0.0.1
同样MySQL将不会运行任何主机来连接到它。在本机和任意主机都创建了用户nagios。这个用户接着在所有的数据库中被授予所有的权限这将在会用在监控中。
下面的设置对所有的MySQL服务器都已经设置。
root@nagios:~# mysql -u root p
## MySQL root password here ##
'nagios@localhost'用户在MySQL服务器中创建了。
mysql> CREATE USER 'nagios'@'localhost' IDENTIFIED BY 'nagios-pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'nagios'@'localhost';
'nagios@any-host'用户创建了。
mysql> CREATE USER 'nagios'@'%' IDENTIFIED BY 'nagios-pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'nagios'@'%';
mysql> FLUSH PRIVILEGES;
这使MySQL监听所有的接口同样接受来自用户'nagios'的进入链接。
请注意,这种变化可能有安全隐患,所以需要说几句话:
- 这个设置将会暴露MySQL给所有的接口包括WAN。确保只有合法的网络访问是非常重要的。应该使用防火墙和TCP封装器等过滤器。
- MySQL用户nagios的密码应该非常强。如果只有几台Nagios服务器,那么应该创建'nagios@servername'用户而不是任意用户的'nagios@%'。
#### 对MySQL的NAgios配置 ####
用下面的来做一些调整。
root@nagios:~# vim /etc/nagios3/conf.d/services_nagios2.cfg
----------
define service{
use generic-service
host_name test-server-1
;hostgroup can be used instead as well
service_description Check MYSQL via TCP port
check_command check_tcp!3306
}
define service{
use generic-service
host_name test-server-1
;hostgroup can be used instead as well
service_description Check availability of database 'testDB'
check_command check_mysql_database!nagios!nagios-pass!testDB
;check_mysql!userName!userPassword!databaseName
}
这样,Nagios就可以同时监控MySQL服务器和数据库的可用性。
### 监控Apache服务器 ###
Nagios同样也可以监控Apache服务。
#### Apache监控需要 ####
- 监控apache是否可用
这个任务非常简单因为Nagios有一个内置命令。
root@nagios:~# vim /etc/nagios3/conf.d/services_nagios2.cfg
----------
define service{
use generic-service
host_name test-server-1, test-server-2
service_description Check Apache Web Server
check_command check_http
}
现在就非常简单了。
### 监控DNS服务 ###
Nagios通过向DNS服务器查询一个完全合格域名FQDN,或者使用dig工具来查询。默认用于FQDN的是www.google.com但是这个可以按需改变。按照下面的文件修改来完成这个任务。
root@nagios:~# vim /etc/nagios-plugins/config/dns.cfg
----------
## The -H portion can be modified to replace Google ##
define command{
command_name check_dns
command_line /usr/lib/nagios/plugins/check_dns -H www.google.com -s '$HOSTADDRESS$'
}
编辑下面的行。
root@nagios:~# vim /etc/nagios3/conf.d/services_nagios2.cfg
----------
## Nagios asks server-3 to resolve the IP for google.com ##
define service{
use generic-service
host_name test-server-3
service_description Check DNS
check_command check_dns
}
## Nagios asks server-3 to dig google.com ##
define service{
use generic-service
host_name test-server-3
service_description Check DNS via dig
check_command check_dig!www.google.com
}
### 监控邮件服务器 ###
Nagios可以监控不同的邮件服务组件如SMTP、POP、IMAP和mailq。之前提过server-2设置了后缀邮件服务。Nagios将被配置来监控SMTP和邮件队列。
root@nagios:~# vim /etc/nagios3/conf.d/services_nagios2.cfg
----------
define service{
use generic-service
host_name test-server-2
service_description Check SMTP
check_command check_smtp
}
define service{
use generic-service
host_name test-server-2
service_description Check Mail Queue
check_command check_mailq_postfix!50!100
;warning at 50, critical at 100
}
下面的截屏显示了目前配置监控服务的概览。
![](http://farm8.staticflickr.com/7333/11428095956_2868bbdfcc_z.jpg)
### 基于端口自定义监控程序 ###
让我们假设下面的自定义程序同样运行在网络中,监听一个特定的端口。
- 测试1号服务器自定义程序TCP端口 12345
过一些小的调整Nagios也可以帮助监控这个程序。
root@nagios:~# vim /etc/nagios3/conf.d/services_nagios2.cfg
----------
define service{
use generic-service
host_name test-server-1
service_description Check server 1 custom application
check_command check_tcp!12345
}
在完结之前Nagios可以监控网络很多其他的方面。存储在/etc/nagios-plugins/config/中的脚本为Nagios很棒的能力。
一些Nagios提供的脚本被限制在本地服务器。例子包含服务负载、进程并发数量、登录用户数量。这些检查可以提供Nagios服务器内有用的信息。
希望这篇有用。
--------------------------------------------------------------------------------
via: http://xmodulo.com/monitor-common-services-nagios.html
作者:[Sarmed Rahman][a]
译者:[geekpi](https://github.com/geekpi)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://xmodulo.com/author/sarmed
[1]:http://xmodulo.com/install-configure-nagios-linux.html