使用 InfluxDb、Telegraf 和 Grok 存储 Laravel 日志

Storing Laravel Logs using InfluxDb, Telegraf and Grok

我正在尝试使用 Telegraf 集中所有 Laravel 日志并使用 Grafana 将它们可视化。现在我可以使用以下格式存储日志:

[2022-03-31 12:08:50] dev.INFO: microservice_name | default | Update User | 32 | mail@mail.com | Center Name | {"idMember":21212,"card":"00000000D","name":"PAUL","surname_1":"SURNAME1","email":"mail@mail.com"}

我正在使用这个 grok 模式来解析它:

  name_override = "influxDb_users_log"
  grok_patterns = ["%{CUSTOM_LOG}"]
  grok_custom_patterns = '''
    MAGICDATE %{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{TIME}
    CUSTOM_LOG \[%{MAGICDATE:date}\] %{DATA:env}\.%{DATA:severity}: %{DATA:microservice} \| %{DATA:client} \| %{DATA:message} \| %{DATA:id_member} \| %{DATA:email} \| %{DATA:club} \| %{GREEDYDATA:user_row}

然后我进行这个 Flux 查询

from(bucket: "bucket")
  |> range(start: 2018-05-22T23:30:00Z, stop: 2023-05-23T00:00:00Z)
  |> filter(fn: (r) => r["_measurement"] == "influxDb_users_log")
  |> filter(fn: (r) => r["_field"] == "client" or r["_field"] == "club" or r["_field"] == "env" or r["_field"] == "email" or r["_field"] == "date" or r["_field"] == "microservice" or r["_field"] == "user_row" or r["_field"] == "severity" or r["_field"] == "message" or r["_field"] == "id_member")

出现了一些结果,但我不会获得 table 类似于我期望的 SQL 查询,其中日志的每一行都将在其列中解析并显示在一行中.相反,我得到了这个。

稍后我想使用 PHP 库获取查询时,我得到的结果格式很奇怪,如下所示:

$logs = $queryApi->queryRaw(
    'from(bucket:"bucket")
        |> range(start: -100h)');

dd($logs);

我做错了什么吗?我是否错误地存储了值?谢谢!

要获得包含所有字段(clientmessage 等)的 table,请使用 schema.fieldsAsCols(). InfluxDB 2.x stores fields in separate tables. This function is a convenience function for pivot() 用于组织值 column-wise,就像来自 SQL 查询的回复。

queryRaw returns 未处理的响应,即。 Flux 注释的 CSV,因此您可能想使用 query 来获取 table 条记录。请参阅 Queries 文档。