#tracing-layer #slack #tracing #layer #async #filter

tracing-layer-slack

将过滤后的跟踪事件发送到 Slack

21 个版本

0.8.1 2024 年 7 月 3 日
0.7.2 2024 年 4 月 21 日
0.6.1 2023 年 7 月 20 日
0.5.1 2023 年 3 月 9 日
0.4.0 2021 年 10 月 28 日

调试 中排名第 180

Download history 552/week @ 2024-04-13 250/week @ 2024-04-20 103/week @ 2024-04-27 12/week @ 2024-05-04 33/week @ 2024-05-11 13/week @ 2024-05-18 2/week @ 2024-05-25 24/week @ 2024-06-01 33/week @ 2024-06-08 3/week @ 2024-06-15 190/week @ 2024-06-29 19/week @ 2024-07-06 2/week @ 2024-07-13 15/week @ 2024-07-20 11/week @ 2024-07-27

每月下载 64

Apache-2.0

13KB
155 代码行

tracing-layer-slack

Docs Crates.io

tracing-layer-slack 为发送 Layer 实现了发送 tracing 事件到 Slack。

概述

SlackLayer 使用 tokioreqwest 通过 POST 请求将每个新的跟踪事件发送到 Slack Webhook URL。text 字段的格式是静态定义的。

此层还会在每个事件的父 span 上查找可选的 JsonStorageLayer extension。此扩展可能包含事件父 span 的附加上下文信息,这些信息包含在 Slack 消息中。

安装

配置依赖关系并直接从 GitHub 拉取

[dependencies]
tokio = "1.0"
tracing = "0.1"
tracing-layer-slack = "0.6"

示例

查看 examples/ 中的完整示例列表。

简单示例

在这个简单示例中,使用环境中的 Slack 配置创建了一个层。在三个不同的 future 中创建了孤儿事件(没有父 span 的事件)和在 span 中发生的事件,并快速将许多消息发送到 Slack。

Slack 消息

此截图展示了在运行此示例时发送的前三条Slack消息。发送了更多消息,但这些消息已被这些图像截断。

Slack区块

默认情况下,消息使用Slack区块发送。以下是一个示例

Screenshot demonstrating the current formatter implementation for events sent as Slack messages
Slack文本

通过禁用此crate的默认功能(因此禁用blocks功能),您可以恢复到不使用区块套件的旧格式。

Screenshot demonstrating the current formatter implementation for events sent as Slack messages

代码示例

使用以下命令在本地运行此示例

$ git clone https://github.com/seanpianka/tracing-layer-slack.git
$ cd tracing-layer-slack
$ cargo run --example simple

您必须将Slack配置导出到环境中。

来源
use regex::Regex;
use tracing::{info, warn, instrument};
use tracing_subscriber::{layer::SubscriberExt, Registry};

use tracing_layer_slack::{EventFilters, SlackLayer};

#[instrument]
pub async fn create_user(id: u64) -> u64 {
    network_io(id).await;
    info!(param = id, "A user was created");
    id
}

#[instrument]
pub async fn network_io(id: u64) {
    warn!(user_id = id, "some network io happened");
}

pub async fn controller() {
    info!("Orphan event without a parent span");
    let (id1, id2, id3) = tokio::join!(create_user(2), create_user(4), create_user(6));
}

#[tokio::main]
async fn main() {
    // Only show events from where this example code is the target.
    let target_to_filter: EventFilters = Regex::new("simple").unwrap().into();

    // Initialize the layer and an async background task for sending our Slack messages.
    let (slack_layer, background_worker) = SlackLayer::builder("my-app-name".to_string(), target_to_filter).build();
    // Initialize the global default subscriber for tracing events.
    let subscriber = Registry::default().with(slack_layer);
    tracing::subscriber::set_global_default(subscriber).unwrap();

    // It must be explicitly started before any messages will be handled.
    background_worker.start().await;
    // Perform our application code that needs tracing and Slack messages.
    controller().await;
    // Waits for all Slack messages to be sent before exiting.
    background_worker.shutdown().await;
}

依赖项

~13–29MB
~457K SLoC