みなさんこんにちは。本連載でHTCondorをご紹介しているのに刺激されたのか、GoogleとSony Pictures Imageworksがレンダーファーム管理システムOpenCueをオープンソースとして公開しました。記事執筆時点でもWikiにはインストールやCueGUIを使用したジョブの投入といった内容が詳細に書かれているため、手元に環境をつくるのも容易そうです。既に試された方もいらっしゃるのではないでしょうか。
もうひとつ気になるニュースがありました。オープンソースのコンポジットソフトウェア、NATRONが開発者を募集しています。いつからトップページにMaintainer Needed ! という表記がされていたのかは定かではないですが、Natron development status?を見た感じ、メインの開発者があまりNATRONに時間を割くことができなくなってしまっているようです。我こそは!という方は参加してみるのはいかがでしょうか。NATRONもちょっと調べると面白くて、INRIA(フランス国立情報学自動制御研究所)の研究者が開発を行い、INRIAも公式にサポートをしている(いた?)ようです。HTCondorといいNATRONといい、研究機関の中でこういう動きがあるのは面白いです。
TEXT_痴山紘史 / Hiroshi Chiyama(日本CGサービス)
EDIT_尾形美幸 / Miyuki Ogata(CGWORLD)
HTCondorのモニタリング環境の構築
今回から数回に渡ってHTCondorの各種状態をモニタリングするための環境をつくっていきます。
まずは、先行事例を調べます。
最も詳細な情報が公開されているのが Fifemonのようです。これは HTCondor Week 2016でもComprehensive Grid and Job Monitoring with Fifemonと題して発表が行われています。また、同日にCERNもMonitoring HTCondor: A commonone-stop solution?と題して発表を行なっています。
さらに、HTCondor Week 2017でもMonitoring Primer HTCondor Week 2017、Monitoring and Analytics with HTCondor Data、Monitoring HTCondor A Marriage of Open Source and Customの3セッションが設けられています。
そして、DreamWorks AnimationでもHTCondorを使用しているようで、HTCondor Week 2017でHTCondor at DreamWorksと題して発表が行われています。これは私も最近まで知らなかったのでこの資料を見つけたときは驚きました。
これらの資料を見ていると、大体の傾向がわかります。まず、HTCondor poolの状態を監視するためにはGraphiteやElasticsearchを使ってデータを蓄積し、Grafanaを使って可視化をするのが流行りで、HTCondorのモニタリングをするなら、とりあえずFifemonを使っておきましょうという感じのようです。
そのため、われわれもとりあえずこのながれに乗ってみることにします。Fifemonを使用して構築した場合、最終的なシステム構成は以下のようになります。
※上図はComprehensive Grid and Job Monitoring with Fifemonから引用しています。
システムの構築手順はFifemonのマニュアルに載っているので、そこを手がかりに始めます。
まず、以下のものが動作している必要があります。
・Python 2.6 or greater recommended.
・HTCondor libraries and Python bindings
research.cs.wisc.edu/htcondor/downloads/
・A running Graphit server (available in EPEL or via PIP)
graphite.readthedocs.org/en/latest/
また、ジョブとスロットの状態を監視するために以下の2つも必要です。
・A running Elasticsearch cluster
www.elastic.co/products/elasticsearch
・Logstash (tested with v2.0.0+)
www.elastic.co/downloads/logstash
PythonとHTCondorはいいでしょう。Graphite serverのインストールが必要なので、指定されたページのドキュメントを参考にインストールします。
・Graphiteのインストールと起動
ドキュメントを参考に進めます。GraphiteはDockerイメージが公開されているようなので、それを使用します。ただし、ドキュメントのままだとport 80を使用されてしまうので、9080を使用するようにします。
$ sudo docker run -d --name graphite --restart=always -p 9080:80 -p 2003-2004:2003-2004 -p 2023-2024:2023-2024 -p 8125:8125/udp -p 8126:8126 graphiteapp/graphite-statsd
ブラウザでアクセスすると、Graphiteのページが表示されます。拍子抜けするほど簡単です。
あわせてGrafanaもインストールしておきます。
ドキュメントによるとDockerイメージが用意されているのでこれを使います。
$ sudo docker run -d --name=grafana -p 3000:3000 grafana/grafana
続けてInstalling using Dockerも参考にして設定を行います。
管理者用のパスワードはconf/grafana.iniでも設定できますが、コンテナ起動時にも指定できるようなのでパスワードを指定してコンテナを起動しなおします。
$ sudo docker run -d -p 3000:3000 -e "GF_SECURITY_ADMIN_PASSWORD=secret" grafana/grafana
ユーザー名admin、パスワードsecretでログインできれば成功です。
※ もちろん、本番運用する場合はきちんと設定を行いましょう。
続いてElasticsearchのインストールと起動をします。
これもDockerイメージがあるので、ありがたく使わせていただきます。
$ sudo docker pull docker.elastic.co/elasticsearch/elasticsearch:6.6.0
$ sudo docker run -d --name elasticsearch --restart=always -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.6.0
・Logstashのインストールと起動
$ sudo docker pull docker.elastic.co/logstash/logstash:6.6.0
$ sudo mkdir /root/pipeline
$ sudo docker run -d --name logstash --rm -it -v /root/pipeline/:/usr/share/logstash/pipeline/ docker.elastic.co/logstash/logstash:6.6.0
何と、これだけで環境構築に必要なソフトウェアの多くがインストールできてしまいました。昔ならこれだけで半月くらいはウンウン唸りながら試行錯誤したものなのですが、いい時代になったものです。もちろんここから業務で運用するとなるといろいろキッチリと構築する必要があり、その苦労は昔から変わらないんですけどね。それでも初手の速さは本当にありがたいです。