#bgp #api #bgpkit #api-service #command-line-tool

bin+lib bgpkit-broker

一个库和命令行工具,用于提供对公共BGP数据存档文件的索引和搜索功能

28个版本

0.7.5 2024年8月23日
0.7.0 2024年6月18日
0.7.0-beta.52024年1月29日
0.7.0-beta.32023年12月1日
0.3.2 2021年10月29日

#154 in Web编程

Download history 117/week @ 2024-05-03 92/week @ 2024-05-10 68/week @ 2024-05-17 58/week @ 2024-05-24 138/week @ 2024-05-31 112/week @ 2024-06-07 259/week @ 2024-06-14 139/week @ 2024-06-21 98/week @ 2024-06-28 64/week @ 2024-07-05 92/week @ 2024-07-12 95/week @ 2024-07-19 98/week @ 2024-07-26 259/week @ 2024-08-02 374/week @ 2024-08-09 156/week @ 2024-08-16

912每月下载量
3 crates中使用

MIT许可证

170KB
3.5K SLoC

BGPKIT Broker

Rust Crates.io MIT licensed Better Uptime Badge Twitter Mastodon

BGPKIT Broker是一个在线数据API服务,允许用户通过时间、收集者、项目或数据类型搜索公开可用的BGP存档文件。该服务几乎实时(延迟小于5分钟)索引存档。目前,我们正在索引来自RIPE RISRouteViews的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

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]。我们的后端服务设计灵活,应该能够适应大多数数据存档方法。

https://bgpkit.com/favicon.ico

依赖关系

~5–28MB
~465K SLoC