Logflare
Logflare 是一个集中式的基于 Web 的日志管理解决方案,可以轻松访问 Cloudflare、Vercel 和 Elixir 的日志。
Logflare 封装器允许您在 Postgres 数据库中读取来自 Logflare 端点的数据。
准备
在开始之前,请确保您的数据库上安装了wrappers
扩展:
create extension if not exists wrappers with schema extensions;
然后创建外部数据封装器:
create foreign data wrapper logflare_wrapper
handler logflare_fdw_handler
validator logflare_fdw_validator;
安全保护您的凭证(可选)
默认情况下,Postgres 将外部数据封装器(FDW)的凭证以明文形式存储在 pg_catalog.pg_foreign_server
表中。任何有权访问此表的人都能够查看这些凭证。封装器设计为与Vault 配合使用,Vault 提供了额外的安全级别来存储凭证。我们建议您使用 Vault 来存储您的凭证。
-- Save your Logflare API key in Vault and retrieve the `key_id`
insert into vault.secrets (name, secret)
values (
'logflare',
'YOUR_SECRET'
)
returning key_id;
连接到Logflare
我们需要为 Postgres 提供连接到 Logflare 的凭证以及任何额外的选项。我们可以使用 create server
命令来完成这个操作:
使用Vault
create server logflare_server
foreign data wrapper logflare_wrapper
options (
api_key_id '<key_ID>' -- The Key ID from above.
);
不使用Vault
create server logflare_server
foreign data wrapper logflare_wrapper
options (
api_key '<Logflare API Key>' -- Logflare API key, required
);
创建外部表
Logflare 封装器支持从 Logflare 的端点读取数据。
Integration | Select | Insert | Update | Delete | Truncate |
---|---|---|---|---|---|
Logflare | ✅ | ❌ | ❌ | ❌ | ❌ |
例如:
create foreign table my_logflare_table (
id bigint,
name text,
_result text
)
server logflare_server
options (
endpoint '9dd9a6f6-8e9b-4fa4-b682-4f2f5cd99da3'
);
元数据列
您可以在外部表中定义一个特定的元数据列 _result
(数据类型:text
)。它将存储整个结果记录的 JSON 字符串格式,因此您可以使用 Postgres JSON 查询(如 _result::json->>'foo'
)从中提取任何字段。请参阅下面的更多示例。
查询参数
可以通过特定的参数列(如 _param_foo
和 _param_bar
)传递 Logflare 端点查询参数。请参阅下面的更多示例。
外部表选项
完整的外部表选项列表如下:
endpoint
- Logflare 端点的 UUID 或名称,必需.
查询下推支持
This FDW doesn’t support query pushdown.
示例
一些关于如何使用 Logflare 外部表的示例。
基本示例
假设 Logflare 端点的响应如下:
[
{
"id": 123,
"name": "foo"
}
]
然后我们可以这样定义一个外部表:
create foreign table people (
id bigint,
name text,
_result text
)
server logflare_server
options (
endpoint '9dd9a6f6-8e9b-4fa4-b682-4f2f5cd99da3'
);
select * from people;
查询参数示例
假设 Logflare 端点接受 3 个参数:
- org_id
- iso_timestamp_start
- iso_timestamp_end
并且它的响应如下所示:
[
{
"db_size": "large",
"org_id": "123",
"runtime_hours": 21.95,
"runtime_minutes": 1317
}
]
我们可以像这样定义一个外部表和参数列:
create foreign table runtime_hours (
db_size text,
org_id text,
runtime_hours numeric,
runtime_minutes bigint,
_param_org_id bigint,
_param_iso_timestamp_start text,
_param_iso_timestamp_end text,
_result text
)
server logflare_server
options (
endpoint 'my.custom.endpoint'
);
并且可以像这样使用参数进行查询:
select
db_size,
org_id,
runtime_hours,
runtime_minutes
from
runtime_hours
where _param_org_id = 123
and _param_iso_timestamp_start = '2023-07-01 02:03:04'
and _param_iso_timestamp_end = '2023-07-02';