php实现的轻量级日志文件监控转储脚本
通过这个轻巧的脚本可以很容易的将日志送到 elasticsearch 中,并且本地测试处理能力基本保持在接近1w/s的速度。
脚本主要实现两个功能,输入和输出。
php agent.php --listen=case.log 用来监听访问日志的变更
或者使用命令 tail -F case.log | php agent.php --listen 来监听来自 stdin 的输入。
该功能会持续将监听到的变更记入Redis队列中同时格式化将要记录的Log。
php agent.php --indexer 用来建立索引,该脚本每秒约索引8千左右,也可开多个并行处理。
该功能会持续将Redis队列中的数据导入 ElasticSearch 数据库中。
php logstash.php --build=1 在本地生成的 case.log 中追加一条log。
PHP 5.4.0 +
redis 扩展
curl 扩展
php agent.php --listen= 从头读取文件并持续监听
tail -F case.log | php agent.php --listen 监听 Stdin 传入的数据
php agent.php --indexer
可将以上命令放置在shell中执行
#/bin/bash nohup tail -F access.log | php agent.php --listen & nohup php agent.php --listen=case.log & nohup php agent.php --indexer &
调试方式
程序提供了一个指令用来模拟日志写入
php logstash.php --build=<log_number> #生成的log条目数,默认20万条 文件保存为case.log并且在同级目录下,可用命令 tail -F case.log | php agent.php --listen 或 php agent.php --listen=case.log 测日志监听状态,并从redis中查看结果,或重新定义parser方法在内部中断调试日志解析过程
全部指令
agent.php --listen=<file_path> #将脚本设置为输入模式,用来监听日志文件输入 agent.php --listen #不指定文件将监听来自 stdin 的输入 agent.php --indexer #将脚本设置为索引模式,用来将队列的数据发送到 ElasticSearch 服务器 agent.php --status #查看队列情况和处理速度
全部配置文件如下,默认均有默认值 [ 'redis' => 'tcp://127.0.0.1:6379', # redis地址,支持认证不支持数组。认证tcp://auth:密码@127.0.0.1:6379 'type' => 'log' # redis 队列key,及es的index type 'agent_log' => __DIR__ .'/agent.log', # 日志保存地址 'input_sync_memory' => 5*1024*1024 # 输入信息到达指定内存后同步 'input_sync_second' => 5 # 输入信息等待超过指定秒数后同步,以上2个条件共同触发 'parser' => [$this,'parser'] # 自定义输入端日志的处理格式,默认与程序提供的logformat json一致 'elastic' => 'http://127.0.0.1:9200' # elastic search通信地址,支持数组,可配置多个随机访问 # 支持密码 程序采用 http auth_basic 认证方式 # 使用密码 http://user:pssword@127.0.0.1:9200 'prefix' => 'phplogstash', # es 默认索引前缀名字为 phplogstash-2015.12.12 'shards' => '5', # es 分片数量 'replicas' => '2', # es 副本数量 ];
程序默认使用如下Nginx的log_format,设置步骤如下
1、将如下 log_format 规则放置在 nginx 的 http 配置内
log_format json '{"timestamp":"$time_iso8601",' '"host":"$server_addr",' '"server":"$server_name",' '"client":"$http_x_forwarded_for",' '"size":$body_bytes_sent,' '"responsetime":$upstream_response_time,' '"domain":"$host",' '"method":"$request_method",' '"url":"$uri",' '"requesturi":"$request_uri",' '"via":"$server_protocol",' '"request":"$request",' '"uagent":"$http_user_agent",' '"referer":"$http_referer",' '"status":"$status"}'; 如果是内网机器需要使用该变量获取真实IP $http_x_forwarded_for 2、将如下置放在 server 的配置内。 access_log web_accesslog.json json
生成的日志格式入如下,默认build的也是这种格式
{ "timestamp": "2015-12-18T14:24:26+08:00", "host": "10.10.23.139", "message": "0", "server": "localhost", "client": "127.0.0.1", "size": 197, "responsetime": 0.010, "domain": "www.localhost.com", "method": "GET", "url": "/index.php", "requesturi": "/controller/action?arg1=1&arg2=2", "via": "HTTP/1.1", "request": "GET /controller/action?arg1=1&arg2=2 HTTP/1.1", "uagent": "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)", "referer": "-", "status": "200" }
默认的 parser 会把 request 的请求分解成resquesturi与args,然后提交给elasticsearch方便汇总查看,如果不需要这么详细的拆分请直接使用request字段即可。
Array ( [timestamp] => 2015-12-18T14:24:26+08:00 [host] => 10.10.23.139 [message] => 0 [server] => localhost [client] => 127.0.0.1 [size] => 197 [responsetime] => 0.01 [domain] => www.localhost.com [method] => GET [url] => /index.php [requesturi] => /controller/action?arg1=1&arg2=2 [via] => HTTP/1.1 [uagent] => Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) [referer] => - [status] => 200 [resquesturi] => /controller/action [args] => Array ( [arg1] => 1 [arg2] => 2.7.1 ) )
第一篇:logstash安装加简单配置 https://blog.csdn.net/mayancheng7/article/details/84754571 第二篇:elasticsearch安装加简单配置 https://blog.csdn.net/mayancheng7/article/details/84767669 第三篇:kibana安装加简单配置 https://blog.csdn.n
概述 本文主要是展示将logstash作为rsyslog服务器,并收集远程的rsyslog日志。 本文阅读的基础建立在: * 了解rsyslog服务器,或者阅读rsyslog日志服务器-日志写入远端rsyslog服务器 * 对ELK有初步的了解,并有体验过ELK进行日志收集,或者阅读ELK:环境搭建&初体验 测试环境 2个CentOS7系统: ELK服务器 rsyslog客户端 实战 logsta
概述 ELK可以用来实时监控日志文件,并记录。 测试环境 1个CentOS7系统: ELK服务器 测试思路 ELK监控/var/log/messages日志文件,并记录 实战 logstash配置文件 logstash的配置文件(logstash.conf.file)如下 input { file { path => "/var/log/messages" start_posit
logstash 的配置:proxy_protocol 设置为 true input { #开启远程输入日志服务 tcp { port => "4560" mode => "server" type => "log4j2" proxy_protocol => true #开启后能获取到代理IP和真实IP地址,并且开启后
日志与监控 Mesos 自身提供了强大的日志和监控功能,某些应用框架也提供了针对框架中任务的监控能力。通过这些接口,用户可以实时获知集群的各种状态。 日志配置 日志文件默认在 /var/log/mesos 目录下,根据日志等级带有不同后缀。 用户可以通过日志来调试使用中碰到的问题。 一般的,推荐使用 --log_dir 选项来指定日志存放路径,并通过日志分析引擎来进行监控。 监控 Mesos 提供
问题内容: 我使用以下代码跟踪ssh登录: 我注意到该脚本在几天后突然停止工作。我没有任何错误,它不会终止,只会停止工作,好像永远不会返回。 所以我执行了a ,这的确最终被脚本处理了,因为前一段时间将其重命名为 如何跟踪这种日志轮换的时间并进行相应调整? 问题答案: 使用e4c5的答案,我得到了这段代码,该代码还解决了每秒调用多次的问题。 在第一次调用期间,它会跳到文件末尾并等待修改。移动文件后,
问题内容: 根据Selenium文档,webdriver客户端和浏览器之间的交互是通过JSON Wire Protocol完成的 。基本上,用python,ruby,java等语言编写的客户端将JSON消息发送到Web浏览器,并且Web浏览器也以JSON进行响应。 有没有一种方法可以在运行selenium测试时查看/捕获/记录这些JSON消息? 例如(在Python中): 我想查看在实例化驱动程序
Elasticsearch 作为一个服务,本身也会记录很多日志信息。默认情况下,日志都放在 $ES_HOME/logs/ 目录里。 日志配置在 Elasticsearch 5.0 中改成了使用 log4j2.properties 文件配置,包括日志滚动的方式、命名等,都和标准的 log4j2 一样。唯一的特点是:Elasticsearch 导出了一个变量叫 ${sys:es.logs},指向你在
点击“日志”标签,通过“查看日志”,或者在测试页面底部的“查看日志”,跳转到splunk日志服务页面,您可以自行过滤,对日志进行查看,具体使用规则请参考日志服务。 点击“监控”标签,通过“查看监控”,跳转到grafana服务页面,监控界面如下图所示,可查看函数的调用次数,运行时间及出错次数。
gulp api 中的 watch() 方法利用文件系统的监控程序(file system watcher)将 globs 与 任务(task) 进行关联。它对匹配 glob 的文件进行监控,如果有文件被修改了就执行关联的任务(task)。如果被执行的任务(task)没有触发 异步完成 信号,它将永远不会再次运行了。 此 API 的默认设置是基于通常的使用场景的,而且提供了内置的延迟和排队机制。
在Ubuntu web服务器[LAMP]上,我试图将PHP错误写入PHP_错误文件中,但不管我做什么,它们都会进入apache日志。 以下是我所做的尝试: > 编辑了php。ini文件: error_reporting=E_ALL|E_STRICT display_error=off log_errors=On error_log /var/logphp_errors.log 重启Apache 检
本文向大家介绍Python pyinotify日志监控系统处理日志的方法,包括了Python pyinotify日志监控系统处理日志的方法的使用技巧和注意事项,需要的朋友参考一下 前言 最近项目中遇到一个用于监控日志文件的Python包pyinotify,结合自己的项目经验和网上的一些资料总结一下,总的原理是利用pyinotify模块监控日志文件夹,当日志到来的情况下,触发相应的函数进行处理,处理