`
月影无痕
  • 浏览: 1003290 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

集中化Linux日志管理系统

阅读更多

 

笔者 工作中 负责 60 台Linux服务器的运维管理工作, 初期 每台机器日志的巡查,是一件相当耗时耗力的工作。后来经过 摸索 ,整理出一个非常适合各种规模的服务器的日志集中化管理,巡查流程,为程序开发人员和运维人员提供单 简单直观 的web界面 巡查所有服务器日志

 

目前这套系统已经投入到我们的生产环境, 实践证明 效果 良好, 大大提高了运维工作中日志检查效率 通过日志, 运维人员就可以 预先发现 各个主机潜在 问题,及时解决之。另一方面,web开发人员,MySQL DBA等人员也可以从这套系统中受益,迅速发现nginx ,php-fpm, mysql, apache的潜在配置问题,从而及时 优化之

 

考虑到集中化日志管理巡查的重要性,笔者愿意将自身的经验分享给大家,同时给出已经编写好(作少量调整,可直接使用)的shell脚本。希望各位朋友在提出宝贵建议,若实施过程中,遇到问题可发邮件至笔者信箱zhangxugg@163.com。

 

这套系统的特点:

1.  部署简单:全部使用常见的软件实现,具有普遍适用性,客户端仅需要使用tftp/crontab部署通用的shell脚本 无须复杂配置即可实现。

2.  功能全面:可管理目前绝大部分系统日志和应用程序日志,如Linx系统日志(messages)、登录日志(secure)、最后登录(lastlog)、crond日志、开机信息(dmesg)、以及MySQL错误日志、 MySQL慢查询日志、nginx错误日志、Apache错误日志(未真正实现)、php-fpm错误日志、php慢日志(执行过慢的php程序的日志)、FTP传输日志。而Linux自带的syslog集中管理,仅能管理系统日志,无太好的实用性。

3.   可灵活扩展:可根据具体需要,轻松扩展管理其它日志(修改shell脚本即可),如squid日志等等。

4.   使用web界面,即可浏览所有客户端各种日志

这套系统中对开发人员最为有用的是MySQL的慢查询日志/错误日志、php-fpm慢日志/错误日志,通过这些日志记录,可及时发现程序中的性能问题。

 

本文主要分三个部分,第一部分描述这套集中化日志管理系统的技术原理,第二部分详细描述部署流程,第三部分附加描述了MySQL, nginx , php-fpm的日志记录的配置事宜,具有很实用参考价值。

 

一、 集中化日志管理系统的技术原理

 

集中化日志管理系统中服务器角色分为客户端和服务器端,客户端定期(cron实现)切割系统及应用程序的日志(shell脚本实现),按一定的格式命名,并用TFTP协议将其推送到中心主机。

 

中心主机运行TFTP服务端程序,接受各个客户端传送而来的日志文件,定期(cron)将日志文件归档,如按客户端IP将日志文件存入不同的目录。 同时为了简化日志的阅读,我们在中心主机上安装nginx (其它http server也可),开启目录浏览功能,这样无论是开发人员,还是运维人员,均可通过web页面检查所有客户端日志,大大提高日志巡查效率。

 

需要注意的事,在这套系统中我们选择使用了TFTP,而没有使用其它方式(如SSH密钥文件认证、NFS、rsync),是出于安全性的考虑,如果使用ssh密钥认证,如果某个客户端被入侵,那么中心主机也难逃厄运。同时TFTP协议简单,无须验证,也简化了我们部署流程。

二、部署流程

中心主机的部署过程:
1. 安装TFTPD(TFTP服务器端,安装光盘中rpm包)和http server(这里使用nginx)。
显然TFTPD的根目录和nginx的日志浏览站点根目录可一样,也可不一样。在本文中,两者的根目录设置成一样。

 

A.  建立TFTPD根目录,并设置好相应权限(用于保存客户端发送而来的日志文件),假设要将日志保存在/data/logs目录中,则需要在中心主机上运行以下命令

mkdir /data/logs

chown -R nobody:nobody /data/logs

/usr/sbin/in.tftpd -u nobody -s /data/logs --umask=002 -p -c -l

这样,TFTPD就配置完毕了,然后在其它机器(也可以中心主机)上,用tftp客户端命令测试下,看看是否能上传文件(需要在客户端安装tftp客户端)假设中心主机IP是172.169.10.1,使用以下命令测试:
cd /var/log

tftp   172.169.10.1 -c put messages messages.log

以上命令是尝试将当前机器的messages文件发送给TFTPD服务器,并以messages.log保存。

若测试没有问题,则可以进行下一步配置

 

B. 配置nginx(Apache也可)并开启目录浏览功能
编辑nginx的配置文件(假设日志浏览站点主机名是logs.local),建立以下虚拟主机配置:

server {

listen  80;

server_name  logs.local ;

root /data/logs;

 

 autoindex_exact_size off;

 autoindex_localtime on;

 autoindex on;

}

 

修改nginx配置目录下的mime.types,加入以下行

text/plain                            log;

 

这样,当在浏览器中点击log文件时,将不会下载,而是直接在浏览器中打开。

然后执行nginx -s reload使用配置生效。再使用浏览器访问logs.local,观察是否可浏览目录(本例中需要在本机hosts中绑定172.169.10.1  logs.local)


2. 客户端部署
相关的shell脚本已经由笔者写好,如果你看到的文章中没有附件下载链接(文章被其它站点转载时,附件丢失),请发邮件到笔者信箱zhangxugg@163.com索取。

 

A.  安装tftp客户端,直接使用Linux光盘中的tftp-0.49-2.x86_64.rpm安装即可

B.  将笔者提供的sync_logs.sh脚本复制到合适的位置(假设复制到/root/tools目录下)

cd /root/tools

#设置运行权限

chmod u+x sync_logs.sh      

 

vi编辑sync_logs.sh的关键配置

f pm_log=/usr/local/php5.3.6/var/log/php-fpm.log

fpm_slowlog=/usr/local/php5.3.6/var/log/php-slow.log

fpm_pid=/usr/local/php5.3.6/var/run/php-fpm.pid

以上分别是php-fpm的错误日志、php慢日志(执行过慢的php脚本日志)、php-fpm的pid文件完整路径,如果此客户端没有安装php-fpm,则在这三行前加#将其注释即可。

 

mysql_log=/data/front/mysql.log

mysql_slowlog=/data/front/mysqlslow.log

mysql_pid=/data/front/my.pid

以上分别是MySQL的错误日志,慢查询日志,MySQL的pid文件路径,如果此客户端没有运行MySQL, 将其注释即可

 

nginx_log=/usr/local/nginx/logs/error.log

nginx_pid=/usr/local/nginx/logs/nginx.pid

nginx的错误日志及pid文件路径,如果此客户端没有安装nginx, 则注释之。

 

server= 172.169.10.1

中心主机的ip或域名

 

修改完毕后,运行脚本并观察结果

./sync_logs.sh

若没有错误发生,回到中心主机的TFTPD根目录中,观察是否有类似172.169.10.16_messages_2011-05-21.log文件生成(172.169.10.16是客户端IP),如果存在,则证明同步日志功能搭建成功。

 

C. 建立cron任务,定期推送日志

crontab -e

#输入以下内容,每天早上6点自动向中心主机传送日志

0   8   *   *   *   /root/tools/sync_logs.sh

 

3.  为中心主机设置日志归档功能
      客户端上传的日志以“IP_日志名称_日期.log”格式保存到TFTP服务器根目录下,TFTP服务器需要定期将这些日志按IP归档。将附件的move_logs.sh复制到中心主机合适的位置(这里是/root/tools/move_logs.sh),如果你找不到此脚本的下载链接,请发邮件到zhangxugg@163.com索取。

     修改move_logs.sh中的logpath参数,将其指向到真实的日志位置(本例中是/data/logs)

    cd  /root/tools

        chmod u+x  move_logs.sh

    

至此,按第2步给其它主机设置即可。

 

FAQ:

此脚本在切割日志时(如MySQL php-fpm, nginx),会影响服务吗?

不会,因为脚本使用的是向服务程序(syslog, mysql, nginx)发送信号的方式让其重新生成日志,故不会影响应用服务。

不支持Aapache的错误日志?

是的,我们的环境中已经没有使用Apache了。若你的环境中有Apache, 则修改sync_logs.sh加入Apache日志推送功能即可。

 

如果部署中有问题或是bug, 如何取得帮助?

  笔者信箱是  zhangxugg@163.com

 

 

三、附录:常见应用程序的日志设置
    1. MySQL的错误日志及慢日志设置
            修改MySQL的配置文件(一般为/etc/my.cnf),修改以下几项即可:
      log-slow-queries="/usr/data/mysql/data/slow.log"

      long-query-time=1

       log-error="/usr/data/mysql/data/mysql.log"

 

修改完毕,须重启MySQL方可生效。

 

2. nginx的日志设置
修改nginx的主配置文件(如/usr/local/nginx/config/nginx.conf)

error_log  logs/error.log;

指定日志路径(相对路径及绝对路径均可)

 

3. php-fpm错误日志及慢日志
php 5.3.0以上版本自带了fpm (fastcgi process manager)模块,可与nginx完美搭配。而新 增的日志功能更为实用,可通过修改php-fpm.conf进行配置(假设php安装在 usr/local/php5.3.6),则编辑 /usr/local/php5.3.6/etc/php-fpm.conf

[global]

pid = run/php-fpm.pid

error_log = log/php-fpm.log

log_level = notice

以上定义主要是记录php程序中错误(运行时程序错误,这对php项目维护人员相当有用)

 

[www]

request_slowlog_timeout = 1s

slowlog = /usr/local/php5.3.6/var/log/php-slow.log

 

定义php慢日志, 执行时间超过1秒,则认为存在性能问题,这对php项目的维护人员非常有用,通过它,可清楚得知php程序中的性能问题。比较遗憾的是官方php源码只提供到最小秒级的记录。

以上两个特性(特别是php慢日志),是我毫不迟疑选择php-fpm+nginx的理由之一。

 

本文的目的即是分享笔者的亲身经验,也希望到能起到抛砖引玉作用,大家在运维工作中,可参考本文思路,充分构建适合自身需要的日志系统。

分享到:
评论
5 楼 嵌入式小小鸟 2016-07-01  
很不错的!力荐!
4 楼 cqison 2014-08-27  
受益
但不知一旦日志量大或集中大量高频传输TFTP是否会丟数据?
3 楼 tengzhaoyong 2013-06-18  
收益颇丰,不过该日志只能定时推送到服务器上,不能及时监控日志情况,有没有更好的方法呢?
2 楼 sirenyanjiusuo 2013-05-28  
支持~[color=red][/color]
1 楼 kfc_davy 2012-09-13  
好。

相关推荐

    RALF:Reflex Active Linux防火墙从日志文件内容填充IP集,以实现自动动态防火墙(ADF)

    一旦将日志文件版本轮换到指定要解析的日志文件版本的数量之外,则在下次运行脚本时,将从该日志文件版本中收集的IP地址将从IP集中删除。 好处 利用具有防火墙功能的动态生成的IP集来自动阻止在网络防火墙而非应用...

    Linux shell编程指南

    本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 ...

    VSIP服务器虚拟化解决方案.pptx

    VSIP服务器虚拟化技术 VSIP系统提供基于Linux内核的KVM(Kernel-based Virtual Machine)虚拟机,通过软硬件模拟具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,把一台X86物理服务器虚拟成...

    Linux多线程服务端编程:使用muduo C++网络库

    4.11Linux 新增系统调用的启示. . . . . . . . . . . . . . . . .. . . . . . . . . 105 第5章高效的多线程日志107 5.1功能需求. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 109 5.2...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    SQL Server是由Microsoft开发和推广的关系数据库管理系统(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的。SQL Server 2000是Microsoft公司于2000年推出的最新版本。 SQL Server 特点:  1....

    magicware Linux 正式版

    接口化的设计让程序框架具有良好的扩展性,框架功能可以根据应用特殊需要进行配置或重新实现,新增功能也容易添加到系统中;支持对python脚本的解释运行,可以便于将经常变化的业务逻辑采用脚本语言来实现,保持核心...

    LINUX与UNIX SHELL编程指南 高清PDF

    本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 shell...

    04735--数据库系统原理.doc

    A、视图 B、数据 C、表 D、数据库 4、数据库管理系统简称( D ) A、DDA B、DB C、DBA D、DBMS 5、( A )是位于用户和操作系统之间的一层数据管理软件。 A、数据库管理系统 B、数据库 C、数据库系统 D、数据库管理员 6...

    睿备份 v4.2.5.zip

    1、跨系统、跨平台支持,Windows/Linux/Unix一机(软件)拿下; 2、创新的集中式管理技术,只需在一台计算机安装,即可管理无限台计算机的数据库/文件备份; 3、混合实例技术,可无限扩展任意实例与任务,不在需要...

    04735--数据库系统原理(1).doc

    A、视图 B、数据 C、表 D、数据库 4、数据库管理系统简称( D ) A、DDA B、DB C、DBA D、DBMS 5、( A )是位于用户与操作系统之间的一层数据管理软件。 A、数据库管理系统 B、数据库 C、数据库系统 D、数据库管理员 6...

    基于J2EE框架的个人博客系统项目毕业设计论...

    SQL Server是由Microsoft开发和推广的关系数据库管理系统(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的。SQL Server 2000是Microsoft公司于2000年推出的最新版本。 SQL Server 特点:  1....

    LINUX与UNIX SHELL编程指南

    本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 shell...

    linux与unix shell编程指南

    本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 shell...

    基于flink的异构数据源流转系统

    同步服务会集中管理同步任务,收拢同步日志、提高内部工作效率。项目特性,简单易用:通过Web页面快速创建数据源、同步任务,操作简单,一分钟上手。定时触发:对接xxl-job定时,设置cron表达式触发同步任务。配置化...

Global site tag (gtag.js) - Google Analytics