What is do-agent by DigitalOcean

1月4日にDigitalOcean公式ブログでdo-agentなるものの発表がされました。

これが一体どういったものなのか、記事を読んで使ってみたのでメモしておきます。

do-agentとは

以降の引用部分は、記事から引っ張ってきたものです。

DigitalOceanはこんな感じで、立ち上げたサーバに対し申し訳程度のグラフダッシュボードを管理画面にて提供しています。

do-agnetは、このグラフをもっと有用なものにするためのツールで、サーバにインストールして使うものです。

開発はオープンソースで行われています。

より簡単に、より正確に、より詳細なメトリクスをモニタリング出来るようにすることで利用者のトラブルシューティングのスピードを向上させたい、という意図があるようです。

At DigitalOcean, we want to make monitoring the services you've deployed simple and easy. As engineers, we know that having greater insight into the machines running in your fleet increases the speed at which you can troubleshoot issues.

do-agentを作成するにあたり、セキュリティに気を配って作成したみたいです。プライベートなデータ(ユーザランドで作成されたデータなど?)へのアクセスは行わず、最低限の権限とリソースのみを使う。

When we began thinking of do-agent, security was one of our top priorities; we wanted to take great care not to collect any data that may be considered private. How could we collect the metrics we felt were necessary with an agent that would require the minimum amount of resources and security privileges?

具体的にはpseudoファイルシステム(疑似ファイルシステム)からシステムの情報を得て、gRPCを利用してDigitalOceanへデータを送っているみたいです。

pseudoファイルシステムとはカーネル内の情報へアクセスを提供するための仮想的なファイルシステムで、例えば/procにマウントされているprocファイルシステムなどが挙げられます。

procファイルシステムによって得られるカーネルの情報は、具体的には/proc/cpuinfoで得られるCPUの情報があります。他にはfreeコマンドで表示されるメモリの情報も、内部的にはprocファイルシステム内にある情報から取得しています。

gRPCとはhttp2に対応したRPCフレームワークで、Googleが開発したらしいです。

RPC(リモートプロシージャ)とは遠隔のコンピュータ上で処理を実行させるための仕組みで、PRCを使うと遠隔先への接続を意識すること無く、分散型アプリケーションを実装することができるもののようです(で合ってるのかな)。

つまり、遠隔のコンピュータ上(do-agentの動いているサーバ)に対しgRPCを叩いてカーネルの情報を取得させているということになるのかな? 逆かも?

do-agentをインストールする

とにかく、実際に使ってみます。

インストール方法はドキュメントにあるとおり、curl -sSL https://agent.digitalocean.com/install.sh | shするだけです。

Ansibleで構成管理しているので、適当にインストールするためのプレイブックを作成して実行します。

# do-agent
- name: do-agent repo is already installed
  stat: path=/etc/yum.repos.d/digitalocean-agent.repo
  register: do_agent_repo
  tags: do-agent

- name: do-agent setup script is downloaded
  get_url: url=https://agent.digitalocean.com/install.sh dest=/tmp/do-agent-install.sh
  when: not do_agent_repo.stat.exists
  tags: do-agent

- name: do-agent repo is installed
  become: yes
  shell: bash /tmp/do-agent-install.sh
  when: not do_agent_repo.stat.exists
  tags: do-agent

インストールすると/etc/yum.repos.d/digitalocean-agent.repoリポジトリが追加され、do-agent-0.4.6-1.x86_64がインストールされます。

実行バイナリと起動スクリプトがファイルシステムに入ります。

$ rpm -ql do-agent
/etc/init.d/do-agent
/opt/digitalocean/bin/do-agent

インストール後自動で起動していました。

$ pgrep -fl do-agent
15996 do-agent
15997 runuser
15998 bash
15999 do-agent

ちなみにDigitalOcean以外のサーバにインストールしても、ドロップレットのIDか何かで認証しているため、デーモンの起動自体ができませんでした。

The /proc files are read and converted into metrics that are transmitted via gRPC to a metrics endpoint. The agent authenticates as belonging to your Droplet and tags all of your data with the Droplet ID.

使用前と使用後のグラフの比較

寂しかったダッシュボードが、

ちょっと賑やかになりました!

Yay!

do-agentの今後

現在は個々のドロップレットの管理画面に行かないとグラフは見れませんが、今後複数のドロップレットのメトリクスをまとめて管理できるサービスが追加されるようです。また、アラート通知機能も追加されるようです。(DigitalOcean Monitoring: Server Performance Monitoring and Alerts)

This new agent opens up many possibilities for future tools that will provide insight into Droplet performance. We're not stopping here! Currently, we're working on a suite of tools which will enable engineers to collectively monitor groups of Droplets instead of individual Droplets.

さらに、プラグイン機能によってデフォルトの監視項目以外の値もモニタリングできるようになるとのことです。

The Prometheus project was a great inspiration and model for this project (and is used in the agent itself), and the ability for you to install plugins to collect arbitrary metrics was inspired by the Munin open-source project. do-agent is itself open source, and we welcome contributions!

モニタリング基盤としてはこれまたGoogleのOSSのPrometheusが参考にされ、使われているようです。またプラグイン機能に関してはMuninに触発されているようです。

The Prometheus project was a great inspiration and model for this project (and is used in the agent itself), and the ability for you to install plugins to collect arbitrary metrics was inspired by the Munin open-source project. do-agent is itself open source, and we welcome contributions!

感想

エージェントをインストールしてモニタリングするあたりがmackerelと似ていますね。まだ機能不足ではありますが今後どんどん機能拡張されていきそうです。

あと私はmackerelを使っているのでぶっちゃけdo-agentを使うメリットは無いのですが、DigitalOceanがどんどんモダンなVPSって感じに進化しているのが楽しくて新愛をこめて使ってみました。

モニタリングツールを作るにあたってはpseudoファイルシステムの活用とRPCを使う構成が今風、なのかな?

参考