php-logstash

日志文件监控转储
授权协议 Apache
开发语言 PHP
所属分类 程序开发、 日志工具(Logging)
软件类型 开源软件
地区 国产
投 递 者 弘承业
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

php-logstash

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模块监控日志文件夹,当日志到来的情况下,触发相应的函数进行处理,处理