28个版本
新 0.7.5 | 2024年8月23日 |
---|---|
0.7.0 | 2024年6月18日 |
0.7.0-beta.5 | 2024年1月29日 |
0.7.0-beta.3 | 2023年12月1日 |
0.3.2 | 2021年10月29日 |
#154 in Web编程
912每月下载量
在 3 crates中使用
170KB
3.5K SLoC
BGPKIT Broker
BGPKIT Broker是一个在线数据API服务,允许用户通过时间、收集者、项目或数据类型搜索公开可用的BGP存档文件。该服务几乎实时(延迟小于5分钟)索引存档。目前,我们正在索引来自RIPE RIS和RouteViews的BGP表转储和更新文件。
此Rust库提供对BGPKIT Broker API的SDK访问以及一个命令行工具来启动自托管代理实例。当前的BGPKIT Broker API可在https://api.bgpkit.com/docs找到。
BGPKIT Broker在Cloudflare Radar的生产环境中使用,为其路由页面和类似BGP劫持检测和路由泄露检测的项目提供动力。
代理Rust SDK
用法
将以下依赖项行添加到您的项目Cargo.toml
文件中
bgpkit-broker = "0.7"
示例
您可以使用以下命令运行此示例: cargo run --example query
(源代码).
use bgpkit_broker::{BgpkitBroker, BrokerItem};
pub fn main() {
let broker = BgpkitBroker::new()
.ts_start("1634693400")
.ts_end("1634693400");
// method 1: create iterator from reference (so that you can reuse the broker object)
// same as `&broker.into_iter()`
for item in &broker {
println!("{}", item);
}
// method 2: create iterator from the broker object (taking ownership)
let items = broker.into_iter().collect::<Vec<BrokerItem>>();
assert_eq!(items.len(), 106);
}
bgpkit-broker
CLI工具
bgpkit-broker
是一个命令行应用程序,它打包了许多功能,使用户能够轻松自托管BGPKIT Broker实例。
安装
使用以下命令进行安装 cargo install [email protected] --features cli
或检出主分支并运行 cargo install --path . --features cli
。
如果您处于 macOS 环境,也可以使用 Homebrew 安装预编译的二进制文件(通用)
brew install bgpkit/tap/bgpkit-broker
用法
bgpkit-broker
有以下子命令
A library and command-line to provide indexing and searching functionalities for public BGP data archive files over time.
Usage: bgpkit-broker [OPTIONS] <COMMAND>
Commands:
serve Serve the Broker content via RESTful API
update Update the Broker database
bootstrap Bootstrap the broker database
backup Backup Broker database
search Search MRT files in Broker db
latest Display latest MRT files indexed
live Streaming live from a broker NATS server
doctor Check broker instance health and missing collectors
help Print this message or the help of the given subcommand(s)
Options:
--no-log disable logging
--env <ENV>
-h, --help Print help
-V, --version Print version
serve
bgpkit-broker serve
是启动 BGPKIT Broker 服务的主体命令。它将启动一个提供 API 端点的网络服务器。除非设置了 --no-update
标志,否则它将定期更新本地数据库。
Serve the Broker content via RESTful API
Usage: bgpkit-broker serve [OPTIONS] <DB_PATH>
Arguments:
<DB_PATH> broker db file location
Options:
-i, --update-interval <UPDATE_INTERVAL> update interval in seconds [default: 300]
--no-log disable logging
-b, --bootstrap bootstrap the database if it does not exist
--env <ENV>
-s, --silent disable bootstrap progress bar
-h, --host <HOST> host address [default: 0.0.0.0]
-p, --port <PORT> port number [default: 40064]
-r, --root <ROOT> root path, useful for configuring docs UI [default: /]
--no-update disable updater service
--no-api disable API service
-h, --help Print help
-V, --version Print version
update
bgpkit-broker update
手动触发本地数据库更新。由于活动 API 将锁定数据库文件,因此此命令 不能 与 serve
同时运行。
Update the Broker database
Usage: bgpkit-broker update [OPTIONS] <DB_PATH>
Arguments:
<DB_PATH> broker db file location
Options:
-d, --days <DAYS> force number of days to look back. by default resume from the latest available data time
--no-log disable logging
--env <ENV>
-h, --help Print help
-V, --version Print version
backup
bgpkit-broker backup
运行数据库备份并将数据库导出到 duckdb 文件和 parquet 文件。此操作 可以 在 serve
运行时执行。
Backup Broker database
Usage: bgpkit-broker backup [OPTIONS] <FROM> <TO>
Arguments:
<FROM> source database location
<TO> remote database location
Options:
-f, --force force writing backup file to existing file if specified
--no-log disable logging
--env <ENV>
-s, --sqlite-cmd-path <SQLITE_CMD_PATH> specify sqlite3 command path
-h, --help Print help
-V, --version Print version
search
bgpkit-broker search
使用默认的生产 API 查询 MRT 文件,除非指定了其他方式。
Search MRT files in Broker db
Usage: bgpkit-broker search [OPTIONS]
Options:
--no-log disable logging
-t, --ts-start <TS_START> Start timestamp
--env <ENV>
-T, --ts-end <TS_END> End timestamp
-d, --duration <DURATION> Duration string, e.g. 1 hour
-p, --project <PROJECT> filter by route collector projects, i.e. `route-views` or `riperis`
-c, --collector-id <COLLECTOR_ID> filter by collector IDs, e.g. 'rrc00', 'route-views2. use comma to separate multiple collectors
-d, --data-type <DATA_TYPE> filter by data types, i.e. 'updates', 'rib'
--page <PAGE> page number
--page-size <PAGE_SIZE> page size
-u, --url <URL> Specify broker endpoint
-j, --json Print out search results in JSON format instead of Markdown table
-h, --help Print help
-V, --version Print version
latest
bgpkit-broker latest
从 RouteViews 和 RIPE RIS 查询每个路由收集器的最新 MRT 文件。
- 使用
--collector COLLECTOR
来缩小显示的收集器。 - 使用
--outdated
标志来切换只显示未及时生成数据的收集器的文件。 - 使用
--json
标志将输出到 JSON 文件而不是 Markdown 表格。
Display latest MRT files indexed
Usage: bgpkit-broker latest [OPTIONS]
Options:
-c, --collector <COLLECTOR> filter by collector ID
--no-log disable logging
--env <ENV>
-u, --url <URL> Specify broker endpoint
-o, --outdated Showing only latest items that are outdated
-j, --json Print out search results in JSON format instead of Markdown table
-h, --help Print help
-V, --version Print version
live
从 NATS 服务器进行直播流。
Streaming live from a broker NATS server
Usage: bgpkit-broker live [OPTIONS]
Options:
--no-log disable logging
-u, --url <URL> URL to NATS server, e.g. nats://127.0.0.1:4222. If not specified, will try to read from BGPKIT_BROKER_NATS_URL env variable
--env <ENV>
-s, --subject <SUBJECT> Subject to subscribe to, default to public.broker.>
-p, --pretty Pretty print JSON output
-h, --help Print help
-V, --version Print version
doctor
检查 Broker 实例的健康状况和缺失的收集器。
Check broker instance health and missing collectors
Usage: bgpkit-broker doctor [OPTIONS]
Options:
--no-log disable logging
--env <ENV>
-h, --help Print help
-V, --version Print version
示例输出(所示收集器的数据现在可用)
checking broker instance health...
broker instance at https://api.broker.bgpkit.com/v3 is healthy
checking for missing collectors...
missing the following collectors:
| project | name | country | activated_on | data_url |
|------------|--------------|-----------------|---------------------|----------------------------------------------------|
| routeviews | decix.jhb | Malaysia | 2022-12-20 12:00:00 | http://archive.routeviews.org/decix.jhb/bgpdata |
| routeviews | pacwave.lax | United States | 2023-03-30 12:00:00 | http://archive.routeviews.org/pacwave.lax/bgpdata |
| routeviews | pit.scl | Chile | 2023-08-31 23:45:00 | http://archive.routeviews.org/pit.scl/bgpdata |
| routeviews | amsix.ams | The Netherlands | 2024-02-22 23:20:00 | http://archive.routeviews.org/amsix.ams/bgpdata |
| routeviews | pitmx.qro | Mexico | 2024-02-23 22:15:00 | http://archive.routeviews.org/pitmx.qro/bgpdata |
| routeviews | iraq-ixp.bgw | Iraq | 2024-04-13 00:01:00 | http://archive.routeviews.org/iraq-ixp.bgw/bgpdata |
部署
Docker
您可以使用提供的 Docker 镜像部署 BGPKIT Broker 服务。此镜像可在 Docker Hub 上找到,地址为 bgpkit/broker。
以分离模式(作为服务)运行
docker run -d -p 40064:40064 bgpkit/bgpkit-broker:latest
您还可以从源代码构建 Docker 镜像
docker build -t bgpkit/bgpkit-broker:latest .
本地 CLI
您也可以使用以下命令在您的服务器上启动 BGPKIT Broker 实例,使用 bgpkit-broker
CLI 工具
bgpkit-broker serve YOUR_SQLITE_3_FILE_PATH.sqlite3 --bootstrap --silent
YOUR_SQLITE_3_FILE_PATH.sqlite3
是 SQLite3 数据库文件的路径。--bootstrap
标志用于从提供的每日备份数据库中初始化数据库内容。--silent
标志用于禁用初始化下载进度条。
在类似于 Debian 或 Ubuntu 的 systemd 管理的操作系统上,您还可以使用以下服务文件来管理 BGPKIT Broker 服务
[Unit]
Description=BGPKIT Broker Service
After=network.target
[Service]
ExecStart=/usr/local/bin/bgpkit-broker serve /var/lib/bgpkit/broker.sqlite3
Restart=on-failure
User=root
[Install]
WantedBy=multi-user.target
将此文件放置在 /etc/systemd/system/bgpkit-broker.service
,并运行 systemctl daemon-reload
以重新加载服务列表,然后您可以使用 systemctl start bgpkit-broker
启动服务。要使服务在启动时自动启动,请运行 systemctl enable bgpkit-broker
。
在 Fly.io 上部署
您可以使用提供的 fly.toml
配置文件 在 Fly.io 上部署 BGPKIT Broker 服务。
请注意,您可能需要根据需要调整机器大小和区域。目前,BGPKIT Broker 服务只需要 1gb
内存和 1
共享 CPU。
数据提供者
如果您有可供公开的数据,并希望被 BGPKIT Broker 服务索引,请发送电子邮件至 [email protected]。我们的后端服务设计灵活,应该能够适应大多数数据存档方法。
依赖关系
~5–28MB
~465K SLoC