Vector by Datadogって知ってる？

こんにちは！Datadog JapanでSales Engineerをしているitakafuです。

Datadog Advent Calendar 2021も22日目となり残り少なくなってきました。この記事ではちょっと趣向を変えて、半分ネタ的な話を書いていきたいと思います！

## Vector とは？

タイトルのとおりですが、[Vector by Datadog (以下Vector）](https://vector.dev/)を皆様ご存知でしょうか。VectorはもともとTimber.ioにより開発されていましたが[Datadogにより買収](https://www.datadoghq.com/blog/datadog-acquires-timber-technologies-vector/)され、現在はVector by Datadogとして継続して開発が進められているAgent/Aggregatorとなります。

実はしれっとDatadogのドキュメント中にもページがあったりします。

**Aggregating Multiple Agents Using Vector**
https://docs.datadoghq.com/agent/vector_aggregation/

## 何ができるの？

Vectorは様々なデータを集約、加工、また様々なツールへとそのデータを連携することが可能な、daemonやsidecarとしてデプロイできるAgent/Aggregatorです。
![vector_sources_trans_sinks](https://p-qkfgo2.t2.n0.cdn.getcloudapp.com/items/JruGlLQZ/156f28b7-4659-423d-8628-df11dfeebfdd.jpg?source=viewer&v=1becb15405eabda12ba007ed6761d46a)

上記の図にあるように、

Sources (データソース）
Transfroms (加工）
Sinks（データ連携先）

と、シンプルに設定することが可能です。

例えばSourceにFluentを設定し、SinksへAWS S3とDatadog Logsを設定すると、FluentからのログをVectorへ集約し、AWS S3とDatadog Logsへ同時に連携することが可能となります。

またSinksへ２つの異なるDatadog Organizationを設定する、なんてことも可能ですので「このデータ、こっちとあっちのOrganizationにも送りたいんだよなぁ」なんてことも可能となります。

以下は、実際に１つのログをAとBという２つのOrganizationに送信し、Bに送信する際にはTransformsで「sender:なんちゃか」というタグを付与した例です。

**Organization A:**
![org_a](https://p-qkfgo2.t2.n0.cdn.getcloudapp.com/items/4gul4w7g/c0e87f41-f6aa-435d-acf8-eaf44f8970be.jpg?source=viewer&v=ddd9ced5941300d3a5568c989762b047)

**Organization B:**
![org_b](https://p-qkfgo2.t2.n0.cdn.getcloudapp.com/items/nOuv16Wy/8c00f881-384a-4254-8002-0d621f354c76.jpg?source=viewer&v=628b7dbf13f3d96f3711ffa289dd89b8)

また１つのログをDatadog LogsとAWS CloudWatch Logsの両方へログを送ってみる、なんてこともやってみました。

**Datadog Logs:**
![datadog_logs](https://p-qkfgo2.t2.n0.cdn.getcloudapp.com/items/6quYNmx1/2610e495-417e-4ad4-b8b7-17f5ad18da0c.jpg?source=viewer&v=921cdbfb89defe39aaa8bf9986c9db2e)

**AWS CloudWatch Logs:**
![cw_log](https://p-qkfgo2.t2.n0.cdn.getcloudapp.com/items/p9ukLR8l/ff95deda-4493-40d6-9bd6-133fb67f125a.jpg?source=viewer&v=519c579db2c6cda666998d91372fcd15)

と、なかなか色々な想像が膨らんできて夢が広がりますね！！！

## まとめ

by Datadogという形で、Datadog自身Observabilityプラットフォームを提供する身ではありますが、Datadogだけでは無く「Observability」という意味で様々なデータを集約し、様々なプラットフォームへと連携できるようなものになっています。まさに「Take control of your observability data」です。

どなたでも試せるようになっていますので、ぜひご興味あるかたは覗いてみてください！

https://vector.dev/

## 注意点

Vectorは現在絶賛開発中ですので、例えば `Datadog Agent -> Vecotr`というようなDatadog AgentをSourceとする場合、現状ログのみ対応（Metricsは現状非対応）や、Vector自身SourceとしてのTraceのサポートは絶賛開発中、など、まだいくつか制限があります。

VectorのドキュメントやGithubのほうでにてそれぞれ設定可能なSourceの対応状況、Sinksの対応状況、またTransformsの書き方などなど確認可能ですのでぜひご参照ください。

https://vector.dev/docs/reference/configuration/

https://github.com/vectordotdev/vector#features

## おまけ

VectorはRustで実装されていて、実は `--enable-datadog-tracing`というオプションが存在します。これは、APMが有効となっているDatadog Agentが動作している環境で、このオプションを付与してVectorを起動すると、Datadog APMにてVector自身の動作のTracingが確認することができます。

![vector_apm](https://p-qkfgo2.t2.n0.cdn.getcloudapp.com/items/geuAOvlj/775b82b8-2b29-41e3-a99e-2af103d8feeb.jpg?source=viewer&v=8a2247e8189adf9d1f9408dfdd91c1a4)

「Datadog APMってRust対応してなかったような…」と思ったそこのあなた、正解です。Datadog APM自身はRustに対応していません。どうなってるのかな、と気になった方は、VectorのRepositoryに自身のTracingのRFCなんかもありますので探してみると面白いかもしれません :wink: