使用 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);
我做错了什么吗?我是否错误地存储了值?谢谢!
要获得包含所有字段(client
、message
等)的 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 文档。
我正在尝试使用 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);
我做错了什么吗?我是否错误地存储了值?谢谢!
要获得包含所有字段(client
、message
等)的 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 文档。