- 浏览: 1008523 次
- 性别:
- 来自: 北京
最新评论
-
lizuodu:
非常不错
使用mysql federated引擎构建MySQL分布式数据库访问层 -
u010620626:
除了 libmysql 和 mysqlnd, 在 linux ...
PHP 5.3.0以上推荐使用mysqlnd驱动 -
嵌入式小小鸟:
很不错的!力荐!
集中化Linux日志管理系统 -
wfqwang82:
楼主,你好,我配置了一个负载均衡集群两台服务器,都可以启动ke ...
keepalived配置及典型应用案例 -
xialluyouyue:
完全不经过脑子考虑
ThinkPHP 3.1中的SQL注入漏洞分析----论ThinkPHP 3.1中的半吊子的PDO封装
笔者 工作中 负责 着 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的理由之一。
本文的目的即是分享笔者的亲身经验,也希望到能起到抛砖引玉作用,大家在运维工作中,可参考本文思路,充分构建适合自身需要的日志系统。
- logs_shell.zip (1.6 KB)
- 下载次数: 203
评论
但不知一旦日志量大或集中大量高频传输TFTP是否会丟数据?
发表评论
-
深入分析Redis Server went away产生的原因
2017-12-08 15:11 18337目前项目对Redis依赖较重,使用phpredis扩展操作 ... -
PHP中STDIN, STDOUT, STDERR的重定向
2017-04-19 20:41 2073<?php function test(){ ... -
Nginx php upstream sent unexpected FastCGI record: 3 while reading response head
2017-03-16 17:32 2997调用fastcgi_finish_request时,请求数超 ... -
高并发下iptables丢包导致网络变慢解决方法
2013-07-04 13:11 7119很多人估计遇到这个问题,开启iptables时,一旦网络连 ... -
PHP 5.3.0以上推荐使用mysqlnd驱动
2013-06-27 08:56 319541.什么是mysqlnd驱动? PHP手册上的描述 ... -
如何平滑“重启“”mysql
2013-04-12 16:57 3641注意标题中重启是带了引号的 生产环境中的mysql ... -
RHEL/CentOS通用性能优化、安全配置参考
2013-04-08 12:52 8310RHEL/CentOS通用性能优化、安全配置参考 ... -
SSH登录及SFTP文件图形界面传输,推荐使用xshell
2013-03-20 21:50 9086putty : 每次登录都要填写用户名和密码,没有图形化的S ... -
postfix : user unknown. Command output: Invalid user specified问题的解决
2012-10-25 15:39 3244/var/log/maillog日志中不断出现类似以下日志: ... -
配置多个ip地址时源ip的选择
2012-09-02 22:01 39571如果一个主机绑定有 ... -
keepalived配置及典型应用案例
2012-08-28 16:21 43185keepalived配置及典型应 ... -
Linux秒级间隔的计划任务脚本
2012-08-28 14:02 6629Linux 秒级间隔的计划任务脚本 Linu ... -
Linux系统时间变成过去
2012-07-20 10:55 2116系统日志中有报错: smartd[4209]: System ... -
配置varnish缓存对象的体积大小限制
2011-12-05 17:27 3289对于使用过squid的朋友来说,其存在相应的配置项,可忽略体积 ... -
ip_conntrack: falling back to vmalloc解决办法
2011-10-09 10:16 7657falling back to vmalloc 原因是,i ... -
the permanent HWaddr of eth0 .. is still in use by bond0
2011-10-07 23:24 3657the permanent hwaddr is still i ... -
Linux与网络有关的核心设置
2011-08-07 23:00 1990time wait bucket table overflow ... -
file-max与ulimit的关系与差别
2011-06-28 17:57 28951典型的,提供大量静态文件访问的web服务器,缓存服务器(如sq ... -
php-cgi进程占用cpu资源过多负载高的原因分析及解决步骤
2011-01-14 17:25 56695服务器环境:redhat linux 5.5 , nginx ... -
iptables防火墙与vsftpd的被动传输模式
2011-01-10 17:10 4878Linux服务器上开启了防 ...
相关推荐
在本文中,我们将讨论如何建立LINUX日志管理服务器,旨在解决当前系统管理员在日志管理方面遇到的问题,并提供了一种高效、可靠的日志管理解决方案。 一、为什么需要日志管理服务器? 在当前的网络环境中,系统...
以及graylog、splunk等集中式日志管理和分析平台,可帮助管理员更好地管理和分析大量的系统日志。 了解Linux日志文件系统的结构和功能是每个系统管理员的基本技能。通过监控日志,我们可以及时发现系统异常,预防...
该系统特别适用于Linux环境,旨在提高日志分析的智能性、自动化水平,并支持分布式部署。 #### 关键知识点解析 ##### 1. 日志分析的重要性及应用 - **日志文件**: 计算机系统在运行过程中产生的各种记录文件,...
Linux日志系统是系统监控和故障排查的重要工具,它提供了丰富的信息记录,涵盖了从系统启动、用户登录、进程运行到应用程序错误等各种事件。在Linux中,日志信息以明文形式存储,方便用户直接查看和搜索,同时也允许...
理解和分析Linux日志是系统管理的重要环节,它可以帮助我们及时发现和解决系统故障,维护系统稳定性和安全性。定期检查和清理日志也是必要的,以防止日志文件过大占用磁盘空间。通过配置syslog或rsyslog,还可以实现...
3. **journald**: 是Systemd的一部分,提供了更现代的日志管理方式。journald将日志以结构化数据的形式存储,可以更高效地查询和检索。 4. **logrotate**: 这是一个用于定期轮换、压缩、删除日志文件的工具,以防止...
总的来说,Linux远程终端管理系统的学习涵盖了网络协议、安全通信、服务器管理、自动化工具和监控等多个方面。理解并掌握这些知识,对于成为一名合格的Linux系统管理员至关重要。通过实践和课程设计,学生可以深入...
以下将详细介绍一些常见的Linux日志文件及其用途,以及用于查看和管理日志的命令。 一、常见日志文件 1. `/var/log/messages`:这是Linux系统中最主要的日志文件,包含了系统启动后发生的各种事件,如系统警告、...
7. **日志发送**:除了本地存储,`MyLog`还可能支持将日志信息发送到远程服务器,如syslog服务器,或者使用网络协议(如TCP、UDP)发送到日志收集系统,实现集中化的日志管理和分析。 8. **错误处理**:在记录日志...
Puppet是一种先进的配置管理工具,专为Linux、Unix平台设计,用于集中化管理各种系统配置。它引入了一种独特的描述语言,能够有效管理包括配置文件、用户账户、计划任务(cron jobs)、软件包以及系统服务在内的多种...
例如,Red Hat使用Red Hat Satellite进行集中式补丁管理,它允许管理员远程对多个系统进行更新和补丁应用。类似地,Debian有apticron工具,可以自动化检测并安装更新的软件包。 另外,Linux系统管理员还需要关注...
Linux+Cacti+Syslog-ng+Snare的组合是一种高效且强大的日志集中管理系统,它可以帮助IT管理员收集、分析和管理来自多个网络设备的日志信息。这个系统的主要组成部分包括: 1. Linux:作为基础操作系统,Linux提供了...
总结来说,系统日志批量收集分析涉及到Linux环境下日志的集中管理、过滤、分析和安全监控。通过合理利用各种工具和脚本,IT专业人员可以有效地监控系统健康状况,及时发现并解决问题,从而提升系统的稳定性和安全性...
Linux是一个开源的操作系统,广泛用于服务器、桌面计算机、移动设备以及嵌入式系统等多种平台。以下是Linux开发可能包含的几个方面: 1. **Linux系统开发**:开发和维护Linux操作系统本身,包括内核开发、系统库、...
结合rsyslog日志服务器,可以构建起一套有效的日志集中管理系统,为企业提供更全面的运维监控和安全防护。在实际使用中,用户应根据自己的具体需求配置nxlog,确保日志数据的完整性和安全性,同时利用日志分析工具,...
此项目不仅涵盖了RPM与YUM的深入解析,还涉及了软件管理平台的设计与规划,以及规范化管理的具体实施,旨在让参与者全面理解Linux平台软件管理系统的构建与优化。 ### RPM与YUM:软件包管理的基础 #### RPM:Red ...
- **集中式日志**:通过syslog服务器、ELK Stack(Elasticsearch、Logstash、Kibana)或其他日志管理工具收集分散的日志,便于集中分析。 4. **日志分析**: - **基本分析**:查找特定模式、异常行为或错误代码。...