我已经在laravel中创建了一个中间件!
<?php
namespace App\Http\Middleware;
use Carbon\Carbon;
use Closure;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Log;
use phpDocumentor\Reflection\Types\String_;
class SystemActivityLogger
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @return Response|RedirectResponse
*/
public function handle(Request $request, Closure $next)
{
Log::channel('rabbitmq_elk')->info($this->prepareLogData($request));
return $next($request);
}
/**
* Prepare log data and log it
* @param Request $request
* @return string
*/
private function prepareLogData(Request $request)
{
return json_encode([
'ip' => $request->ip(),
'url' => $request->url(),
'agent' => $request->userAgent(),
'date' => Carbon::now()->toDateTimeString(),
'params' => $request->query(),
]);
}
}
此中间件用于日志记录,我希望prepareLogData()
返回json类型,并且我可以使用KQL语法在kibana discover中搜索它。这是我的sdamiii.conf
文件
input {
rabbitmq {
host => "localhost"
port => 5672
heartbeat => 30
queue => "system_logs"
durable => "true"
user => "guest"
password => "guest"
vhost => "/"
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "my-index-000001"
data_stream => "false"
}
}
在运行bin/logstash -f conf.d/sdamiii.conf
命令并请求Laravel后,我在Kiabana中得到以下输出。
但我不按KQL语法搜索,例如我想搜索message.ip
我不接收
我该如何解决这个问题?
2条答案
按热度按时间mspsb9vt1#
当您像这样更改prepareLogData方法时,会得到什么结果?
i2byvkas2#
如果希望整个管道的行为与7.13中的
in 8.x EXACTLY
相同,最好的方法是将管道设置为pipeline.ecs_compaitibility
。由于您使用的配置为每个Logstash进程恰好提供一个管道,因此在
logstash.yml
中这样做是合理的。如果要运行多个管道,则最好在其pipelines.yml
条目中为每个适用的管道都这样做。如果出于某种原因,您希望避免上述简单的路径(提示:您可能没有),可以通过调整管道定义,使每个插件定义都有一个
ecs_compatibility => disabled
指令,来解决这个不赞成使用的警告。我鼓励您选择简单的方法,锁定整个管道所需的行为。
这是输出
现在您可以使用KQL语言进行搜索