Apache服务之httpd运行监控


纸上得来终觉浅,绝知此事要躬行。

Apache服务之httpd运行监控


1. 运行 Apache

1.1 手动启动和停止

启动操作

  • CentOS6/7基本操作一致
# CentOS6上是系统默认安装的;CentOS6上是使用yum安装的
[root@MiWiFi-R3-srv ~]# which httpd
/usr/sbin/httpd

[root@MiWiFi-R3-srv ~]# /usr/sbin/httpd
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:feb8:76b5. Set the 'ServerName' directive globally to suppress this message

[root@MiWiFi-R3-srv ~]# ps -aux | grep httpd
root      18849  0.0  0.3 228272  3704 ?        Ss   18:42   0:00 /usr/sbin/httpd
apache    18850  0.0  0.3 230492  3896 ?        S    18:42   0:00 /usr/sbin/httpd
apache    18851  0.0  0.3 230492  3904 ?        S    18:42   0:00 /usr/sbin/httpd
apache    18852  0.0  0.3 230356  3380 ?        S    18:42   0:00 /usr/sbin/httpd
......

停止操作

  • 通常不推荐手动Killhttpd进程,因为可以导致用户请求无法响应等问题
# 【方法一】手动杀死所有httpd进程
root@MiWiFi-R3-srv ~]# ps -aux | grep httpd | grep -v grep | awk '{print $2}' | xargs kill -9

# 【方法二】手动杀死主httpd进程,推荐使用
root@MiWiFi-R3-srv ~]# updatedb
root@MiWiFi-R3-srv ~]# locate httpd.pid
/var/run/httpd/httpd.pid
root@MiWiFi-R3-srv ~]# cat /var/run/httpd/httpd.pid
18849
root@MiWiFi-R3-srv ~]# cat /var/run/httpd/httpd.pid | kill -9

注释:

  • 提示如下信息httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:feb8:76b5.
  • 说明Apache没有找到默认的服务器主机名,这时使用本机的IP地址作为服务器名称,之后可以通过修改配置文件解决此问题。

1.2 自动启动和关闭

通常在Linux上有两种启动风格:BSDSysV两种启动风格

  • BSDFreeBSDSlackware
  • SysVCentOSdebianRHEL

BSD风格

  • 由于BSD风格的脚本倾向于使用顺序运行,因此只需要在启动脚本的后面加上启动方式就可以了
  • 最直接和暴力的方法就是在rc文件的最后加上/usr/sbin/httpd启动httpd服务
  • 更合理的方法就是编写一个启动脚本,然后在rc的后面加上对这个脚本的调用

SysV风格

  • SysV风格将Linux的启动分为很多不同的级别,每个级别有不同的定义
  • 启动级别3为命令行模式,启动级别5为图形化模式
# CentOS6中实例,7中启动机制为Systemd
[root@MiWiFi-R3-srv ~]# cat /etc/inittab | grep id
id:5:initdefault:

# 启动脚本可以借鉴apachectl脚本
[root@MiWiFi-R3-srv ~]# cat `which apachectl`

# 连接启动级别
[root@MiWiFi-R3-srv ~]# cp /usr/sbin/apachectl /etc/init.d/
[root@MiWiFi-R3-srv ~]# ln -sv /etc/init.d/apachectl /etc/rc3.d/S90httpd
[root@MiWiFi-R3-srv ~]# ln -sv /etc/init.d/apachectl /etc/rc0.d/K90httpd
[root@MiWiFi-R3-srv ~]# ln -sv /etc/init.d/apachectl /etc/rc6.d/K90httpd

1.3 使用 apachectl 管理

程序使用参数

  • start
    • 如果配置文件检查没有问题,启动httpd程序,重复启动报错
  • stop
    • 停止httpd程序,重复停止报错
  • status
    • 显示简要的状态报告,类似于fullstatus选项,但省略正在处理的请求
  • restart
    • 重启启动httpd并检查httpd配置文件
  • graceful
    • 类似于start,但不会中断当前正在处理的连接和日志记录,推荐使用
  • graceful-stop
    • 类似于stop,但不会中断当前正在处理的连接和日志记录,推荐使用
  • configtest
    • 解析并检查配置文件语法
  • fullstatus
    • 显示出有mod_status提供的状态报告,需要启动mod_status模块并安装elinks浏览器

程序帮助信息

[root@MiWiFi-R3-srv ~]# /usr/sbin/apachectl -h
Usage: /usr/sbin/httpd [-D name] [-d directory] [-f file]
                       [-C "directive"] [-c "directive"]
                       [-k start|restart|graceful|graceful-stop|stop]
                       [-v] [-V] [-h] [-l] [-L] [-t] [-S]
Options:
  -D name            : define a name for use in <IfDefine name> directives
  -d directory       : 指定初始的ServerRoot根路径
  -f file            : 指定一个替代ServerConfigFile文件
  -C "directive"     : process directive before reading config files
  -c "directive"     : process directive after reading config files
  -e level           : 指定错误级别(see LogLevel)
  -E file            : 指定错误信息输出到那个文件中
  -v                 : 显示版本号
  -V                 : 显示编译配置(show compile settings)
  -h                 : 列出可用的命令行选项
  -l                 : 显示编译模块(list compiled in modules)
  -L                 : list available configuration directives
  -S                 : a synonym for -t -D DUMP_VHOSTS
  -t -D DUMP_MODULES : 显示加载模块(show all loaded modules)
  -t -D DUMP_VHOSTS  : show parsed settings (currently only vhost settings)
  -M                 : a synonym for -t -D DUMP_MODULES
  -t                 : 运行语法检查配置文件

1.4 运行多个 Apache 服务器

所以的Apache管理员都会遇到一个问题,就是在一台物理系统上运行多个版本的Apache服务器,或者是运行多个同一个版本的Apache服务器。

运行多个不同版本

  • 运行多个不同版本的Apache,只需要在编译时为不同版本的Apache指定不同的安装目录就可以了
  • 这样安装后的服务器及其组件都在指定目录下,每个版本拥有自己的守护进程httpdDSO模块和配置文件
  • ./configure --prefix=/usr/local/apache2.4

运行多个同一个版本

  • 运行多个同一个版本的Apache,只需要指定一个不同的配置文件就可以了
  • 要同时启动多个Apache服务器的关键则是为不同的Apache服务器指定唯一的端口,通过指定不同的配置文件实现
  • httpd -f /usr/local/apache2/conf/httpd.conf

1.5 httpd 命令

httpdapachectl命令参数使用基本一致

  • -D name
    • 通过指定<ifDefine>容器的名称来确认是否使用<ifDefine>容器配置的内容
    • httpd -D SSL
  • -d directory
    • 指定一个新的ServerRoot目录
    • httpd -C /var/www
  • -f file
    • 使用指定的文件作为Apache配置文件
    • httpd -f /usr/local/apache2/conf/httpd.conf
  • -e level
    • 设置LogLevel的错误信息级别
    • httpd -e warn
  • -E file
    • 将错误信息送入到一个指定的文件中
    • httpd -E /var/www/log/log/warn.log
  • -C "directive"
    • 在读取配置文件之前,先处理"directive"的配置
    • httpd -C "DocumentHome" /home/escape
  • -c "directive"
    • 在读取配置文件之后,再处理"directive"的配置
    • httpd -c "DocumentHome" /home/escape
  • -V
    • 显示httpd的版本信息以及编译时的参数
    • httpd -V
  • -l
    • 列出编译到Apache中的模块(核心模块)
    • httpd -l
  • -L
    • 列出可以用到指令的有效参数和使用区域
    • httpd -L
  • -S/-t-D DUMP_VHOSTS
    • 分析配置文件(现在只用于虚拟主机中的配置)
    • httpd -S
    • httpd -t-D DUMP_VHOSTS
  • -M/-t-D DUMP_MODULES
    • 显示所有可供加载的模块
    • httpd -M
    • httpd -t-D DUMP_MODULES
  • -t
    • 测试配置文件
    • httpd -l
  • -v
    • 显示版本信息和编译时间
    • httpd -v
  • -h
    • 显示命令行的帮助
    • httpd -h

2. 监控 Apache

将介绍一些ApacheWeb服务器的监控工具,其中有的是Apache自带的,还有一些是由社区提供的。

2.1 自带的 Web 监视器

通过这两个模块,用户可以很容易知道Apache的工作状态和配置情况。但是在正常工作的服务器上,不推荐使用这两个模块,一是因为它们消耗一点系统资源,二是因为它们会泄露你的服务器信息。

主要模块

  • mod_status
    • 动态显示当前服务器的运行状态
  • mod_info
    • 提供服务器附加的配置信息

mod_status模块

  • 功能
    • 当前工作的进程数量
    • 空闲的进程数量
    • 服务器已经运行的时间
    • 当前正在连接的主机和请求
    • 单个进程的CPU使用率和Apache当前CPU使用的百分比
    • 每秒平均请求量,每秒发送的字节数,每秒请求发送的字节数
  • 启用
    • 配置httpd的配置文件(这里使用/etc/httpd/conf/httpd.conf)
    • 重新reload加载httpd服务
  • 页面地址
    • mod_status页面的访问地址http://you_server_name/server-status
    • mod_status页面的URL之后可以使用?refresh(浏览器刷新间隔)、?auto(显示为状态表格样式)选项等
  • Scoreboard含义
    • _发送回复,S保持连接,RDNS 查询
    • W关闭连接,L登录,G收到结束表示后关闭
    • I需要清除,.空的进程位
# CentOS6中配置
[root@MiWiFi-R3-srv ~]# vim /etc/httpd/conf/httpd.conf
# 确认mod_status模块已经加载
LoadModule status_module modules/mod_status.so

# 取消对于注释,让模块显示更多信息,如每个字httpd进程的应答信息等
ExtendedStatus On

# 取消对于注释
<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from .example.com
</Location>

Apache服务之httpd运行监控

mod_info模块

  • 功能
    • 提供服务器的配置信息并且也不能动态更新
    • 显示了哪些模块正在被使用,每个模块的钩子信息
  • 启用
    • 修改httpd配置文件(这里使用/etc/httpd/conf/httpd.conf)
    • 重新reload加载httpd服务
  • 页面地址
    • mod_info页面的访问地址http://you_server_name/server-info
    • 可以显示模块信息,如http://you_server_name/server-info#mod_perl.c
    • mod_info页面的URL之后可以使用?config(配置文件)、?<module-name>(模块信息)、?list(所有使用中的模块列表)、server(基本服务器信息)、?hooks(每个模块所属钩子列表)选项等
# CentOS7中配置,mod_info模块不在httpd.conf文件中,而是使用模块化配置
[root@MiWiFi-R3-srv ~]# cat /etc/httpd/conf.modules.d/00-base.conf | grep mod_info
LoadModule status_module modules/mod_info.so

# 【方式一】在/etc/httpd/conf/httpd.conf文件,添加如下内容
# 【方式二】在/etc/httpd/conf.d中新建server-info.conf文件,添加如下内容
<Location "/server-info">
    SetHandler server-info
    Require host example.com
    Require ip 127.0.0.1
    Require ip 192.168.31.173
    Require not ip 192.168.31.94
</Location>

Apache服务之httpd运行监控


2.2 第三方 Web 工具

主要工具

  • zabbix
  • nagios

zabbix软件

  • 简述
    • 基于PHP脚本的分布式系统监视以及网络监视功能的企业级开源解决方案
  • 特点
    • 自动发现服务器与网络设备
    • 分布式检视以及Web集中管理功能
    • 用户安全认证和可定义的授权方式
    • 通过Web界面设置或查看检视结果
    • 支持pgsql/mysql数据库
  • 安装

nagios软件

  • 简述
    • nagios是一个检视系统运行状态和网络信息的监视系统
  • 特点
    • 服务等检视的并发处理
    • 检视主机资源(进程、磁盘等)
    • 监事网络服务(SMTPPOP3HTTPNNTPPING等)
    • 可指定自定义的事件处理控制器
    • 简单的插件设计可以轻松扩展nagios的监视功能
    • 错误通知功能(通过emailpager或其他用户自定义方法)
    • 可选的基于浏览器的Web界面以及方便查看网络状态、各种系统问题以及日志等
  • 安装
    • yum install nagios

区别

  • 中小规模(服务器<=1k):Zabbix
  • 大规模(1k>=服务器<=10k):Nagios 进行二次开发
  • 超大规模(服务器>=10k):开发适应自己平台的监控软件吧
  • 一个牛逼的东西prometheus.io

文章作者: Escape
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Escape !
  目录