Slide 1

Slide 1 text

1 SMTPでのOpenTelemetryの可能性を考えてみる 渡部 ⿓⼀ Pepabo Tech Conference #22 春のSREまつり 2024.05.09

Slide 2

Slide 2 text

技術部プラットフォームグループ 2021年 中途入社 2 自己紹介 渡部 龍一 Watanabe Ryuichi ● ロール: SRE、メールエンジニア(自称) ● SNS: @ryuichi_1208 ● 好きなこと: EOL対応、障害対応

Slide 3

Slide 3 text

メールの仕組みのおさらい 3

Slide 4

Slide 4 text

4 イントロダクション 届いた! メール送信!

Slide 5

Slide 5 text

5 送信者 MTA MDA MTA MDA SMTP SMTP MXレコード 問い合わせ DNSサーバ 宛先: [email protected] 送信元サーバ 送信先サーバ mail box 受信者

Slide 6

Slide 6 text

6 これ以外にも複数の登場⼈物がいる

Slide 7

Slide 7 text

7 SMTPのシーケンス図

Slide 8

Slide 8 text

割と複雑! 8

Slide 9

Slide 9 text

9 テストで送ってみたメールが届かないんですが ...

Slide 10

Slide 10 text

10 どこで落ちてるのか調べるのが⼤変

Slide 11

Slide 11 text

11 ● 送信⽤メールクライアント⾃体がバグっている ● アプリケーションのバグ ● ウイルス判定されている ● リレー設定のミス ● メールサーバのサービスが⽌まっている ● IPレピュテーションの低下によって送信先で拒否されている ● 送信先のメールサーバで拒否する設定になっている 考えられる原因

Slide 12

Slide 12 text

メールサービスでも分散トレースしたい! 12

Slide 13

Slide 13 text

そうだOpenTelemetryだ! 13

Slide 14

Slide 14 text

trace/log/metricsをどう実装するか 14

Slide 15

Slide 15 text

15 ● アプリケーションでtrace idを発⾏してヘッダーに挿⼊する ○ traceparentをメールヘッダーに⼊れる ● Postfixでは、Milterと呼ばれるAPIが提供されている ○ 「mail filter」の略 ■ Rspamd / clamav-milter ○ SMTPプロトコル処理の各段階をフックできる ■ DATAコマンドやMAIL FROMコマンドの各フェーズでトレースの送信ができる ○ Milterでアトリビュートを⼊れつつtraceを送信 trace

Slide 16

Slide 16 text

16 ● Postfixではメールヘッダーをログに書き出すことができる ○ /etc/postfix/header_checksあたりに追記 ■ /^Received:/ PREPEND traceparent: $traceparen ■ td-agentからlokiなりのOtel Backendに送信して連携 ● Milterでログを出⼒して送信する⽅針でも良い ○ 送信元や送信ステータスを属性として出⼒ log

Slide 17

Slide 17 text

17 ● kumina/postfix_exporterあたりを使⽤ ● open-telemetry/opentelemetry-collector-contribにはメール関連のサーバは ない ○ コントリビューションのチャンス..?? ● メールのステータスコード40xとか50xとかとトレースやログに紐づけられたら 便利そう metrics

Slide 18

Slide 18 text

実装⽅針(現在作業中) 18

Slide 19

Slide 19 text

19 ● Pythonで使えるpymilterを⽤いて実装 ○ Milterプロトコルを喋れれば実装⾔語⾃体に制限はないが情報が多そうな Pythonを選定 ● OtelでPythonはTrace/MetricsはstableだがlogsはExperimental ○ Postfix + fluent-bitの組み合わせで考えてる Milterで実装していく

Slide 20

Slide 20 text

まとめと今後やりたいこと 20

Slide 21

Slide 21 text

21 ● メールサービスでもトレースやログがあると便利 ● PostfixではMilterを⽤いることでSMTPの各処理でフックできるのでトレースを埋め込 みやすい ● 「SMTP OpenTelemetry」とか「Postfix OpenTelemetry」でググってもヒット数0な ので取り組むのは結構⾯⽩そう まとめと今後やりたいこと

Slide 22

Slide 22 text

22 ご静聴ありがとうございました