laravel通过tcp把日志文件推送到logstash

在 Laravel 中,可以使用 Laravel 的 Log 驱动程序来将日志推送到 Logstash,而 Logstash 可以使用 TCP 协议来接收日志数据。以下是如何配置 Laravel 日志系统以将日志推送到 Logstash 的步骤:

1、安装 Logstash 驱动程序:

/*
首先,需要安装一个适用于 Logstash 的 Laravel 日志驱动程序。 
一个常用的驱动程序是 "php-logstash"
驱动程序。你可以使用 Composer 来安装它:
*/

composer require monolog/monolog
composer require maxim-krasnyansky/php-logstash

2、配置 Laravel 日志通道:

/*
打开 Laravel 项目的 config/logging.php 文件
然后在 'channels' 配置数组中添加一个新的通道配置,
以将日志发送到 Logstash。以下是一个示例配置:
*/

'logstash' => [
    'driver' => 'custom',
    'via' => \App\Logging\LogstashLogger::class,
    'host' => env('LOGSTASH_HOST', '127.0.0.1'),
    'port' => env('LOGSTASH_PORT', 5000),
],

在这个示例中,我创建了一个名为 'logstash' 的通道,并指定了 Logstash 服务器的主机和端口。可以根据你的实际情况修改这些配置。

3、创建自定义 LogstashLogger:

/*
需要创建一个自定义的 LogstashLogger 类,该类将负责将日志数据发送到 Logstash。
可以在 Laravel 项目的 app/Logging 目录下创建一个新的 PHP 文件,例如 LogstashLogger.php,并添加以下内容:
*/

<?php

namespace App\Logging;

use Monolog\Handler\SocketHandler;
use Monolog\Logger;

class LogstashLogger
{
    public function __invoke(array $config)
    {
        $handler = new SocketHandler("tcp://{$config['host']}:{$config['port']}");
        $handler->setFormatter(new \Monolog\Formatter\LogstashFormatter(config('app.name')));
        
        return new Logger($config['name'] ?? 'logstash', [$handler]);
    }
}


此代码创建了一个 LogstashLogger 类,该类将通过 TCP 连接将日志数据发送到 Logstash 服务器。确保根据之前在配置文件中指定的主机和端口进行配置。

4、更新 .env 文件:

//在项目的 .env 文件中,设置 Logstash 服务器的主机和端口。例如:

LOGSTASH_HOST=your-logstash-host
LOGSTASH_PORT=your-logstash-port

5、使用 Logstash 日志通道:

Log::channel('logstash')->info('xiaowu test laravel log to logstash');

6、修改logstash(具体配置可以查看我之前发布的同步文章链接: 文章地址 )

在这里插入图片描述

input {
  	tcp {
    	type => "tcp"
    	host => "0.0.0.0"
    	port => 4900  # 这里的端口号要和之前 Laravel 配置中的一致
  		}
	}

output {
#这里也可以查看我之前的文章改成es
  stdout {
               codec => rubydebug
         }
}


7、查看结果

在这里插入图片描述

8、如果laravel日志没有写入可以本地手动请求tcp查看是否正常

echo "nc test" | nc 127.0.0.1 4900 

注意:如果出现记录相同的情况需要检查 /usr/share/logstash/pipeline下的文件
logstash的配置文件pipeline中的文件不是依据文件后缀进行判断该文件是否作为配置文件生效的。

如果pipeline目录下有logstash.conf和logstash.confbak,2个配置文件都会被启用。正确的做法是将logstash.confbak移除(或者移出去)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值