微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php-logstash <a href="https://github.com/anythink-wx/php-logstash#%E8%BE%93%E5%85%A5"></a>输入<a href="https://github.com/anythink-wx/php-logstash#%E8%BE%93%E5%87%BA"></a>输 日志文件监控转储

程序名称:php-logstash <a href="https://github.com/anythink-wx/php-logstash#%E8%BE%93%E5%85%A5"></a>输入<a href="https://github.com/anythink-wx/php-logstash#%E8%BE%93%E5%87%BA"></a>输

授权协议: Apache

操作系统: 跨平台

开发语言: PHP

php-logstash <a href="https://github.com/anythink-wx/php-logstash#%E8%BE%93%E5%85%A5"></a>输入<a href="https://github.com/anythink-wx/php-logstash#%E8%BE%93%E5%87%BA"></a>输 介绍

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 扩展

[](https://github.com/anythink-wx/php-

logstash#%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95%E8%AF%B4%E6%98%8E)使用方法说明

[](https://github.com/anythink-wx/php-

logstash#%E8%BE%93%E5%85%A5%E6%96%B9%E5%BC%8F)输入方式

PHP agent.PHP –listen= 从头读取文件并持续监听

tail -F case.log | PHP agent.PHP –listen 监听 Stdin 传入的数据

[](https://github.com/anythink-wx/php-

logstash#%E7%B4%A2%E5%BC%95%E6%96%B9%E5%BC%8F)索引方式

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 #查看队列情况和处理速度

[](https://github.com/anythink-wx/php-

logstash#%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6)配置文件

全部配置文件如下,认均有认值
[
     '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:[email protected]:9200
     'prefix'            => 'PHPlogstash',            # es 认索引前缀名字为 PHPlogstash-2015.12.12 
     'shards'            => '5',                      # es 分片数量
     'replicas'          => '2',                      # es 副本数量
];

[](https://github.com/anythink-wx/php-

logstash#%E6%97%A5%E5%BF%97%E6%A0%BC%E5%BC%8F)日志格式

程序认使用如下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
        )
)

php-logstash <a href="https://github.com/anythink-wx/php-logstash#%E8%BE%93%E5%85%A5"></a>输入<a href="https://github.com/anythink-wx/php-logstash#%E8%BE%93%E5%87%BA"></a>输 官网

https://github.com/anythink-wx/php-logstash

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐