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を使う構成が今風、なのかな?
参考
- GitHub - digitalocean/do-agent: Collects system metrics from DigitalOcean Droplets
- Improved Graphs: Powered by the Open Source DO Agent
- How To Install and Use the DigitalOcean Agent for Additional Droplet Graphs | DigitalOcean
- 疑似(Pseudo)ファイルシステム
- 疑似ファイルシステム ‐ 通信用語の基礎知識
- grpc / grpc.io
- 新しいRPCフレームワーク、gRPCをGoで試してみる。
- 遠隔手続き呼び出し(RPC)の基本概念