状態遷移グラフの可視化

#内容
Pacemakerはpengineプロセスが生成する状態遷移グラフを元にしてリソースの動作を決定します。
よって、pengineの作成する状態遷移グラフを見れば、クラスタ上のリソースに行われる操作が確認出来ます。

通常、DCノード(Pacemakerでクラスタを構成するノードのリーダー)のログを見ることでもこの動作の決定は確認可能です。

```crm_mon

Last change: Tue Sep 15 08:19:21 2015 by root via cibadmin on snmp1
Stack: corosync
Current DC: node1 - partition with quorum
Version: 1.1.12-6052cd1
2 Nodes configured
5 Resources configured


Online: [ node1 node2 ]

 Resource Group: grpA
     prmDummy1  (ocf::heartbeat:Dummy1):        Started node1
     prmDummy2  (ocf::heartbeat:Dummy1):        Started node1
     prmDummy3  (ocf::heartbeat:Dummy1):        Started node1
     prmDummy4  (ocf::heartbeat:Dummy1):        Started node1
     prmDummy5  (ocf::heartbeat:Dummy1):        Started node1

(snip)
```
```log
(snip)
Sep 15 08:19:22 node1 pengine[1570]:     info: native_print:      prmDummy5#011(ocf::heartbeat:Dummy1):#011Stopped
Sep 15 08:19:22 node1 pengine[1570]:     info: RecurringOp:  Start recurring monitor (10s) for prmDummy1 on node1
Sep 15 08:19:22 node1 pengine[1570]:     info: RecurringOp:  Start recurring monitor (10s) for prmDummy2 on node1
Sep 15 08:19:22 node1 pengine[1570]:     info: RecurringOp:  Start recurring monitor (10s) for prmDummy3 on node1
Sep 15 08:19:22 node1 pengine[1570]:     info: RecurringOp:  Start recurring monitor (10s) for prmDummy4 on node1
Sep 15 08:19:22 node1 pengine[1570]:     info: RecurringOp:  Start recurring monitor (10s) for prmDummy5 on node1
★以下のあたりから実行される操作は確認可能
Sep 15 08:19:22 node1 pengine[1570]:   notice: LogActions: Start   prmDummy1#011(node1)
Sep 15 08:19:22 node1 pengine[1570]:   notice: LogActions: Start   prmDummy2#011(node1)
Sep 15 08:19:22 node1 pengine[1570]:   notice: LogActions: Start   prmDummy3#011(node1)
Sep 15 08:19:22 node1 pengine[1570]:   notice: LogActions: Start   prmDummy4#011(node1)
Sep 15 08:19:22 node1 pengine[1570]:   notice: LogActions: Start   prmDummy5#011(node1)
(snip)
```

しかし、実行順番や依存関係などを含めた操作は、このpengineの生成する状態遷移をPNGなどのファイルに変換して、可視化することが可能です。
特に複雑なリソース構成などの場合に、思ったようなリソース起動とならない場合などは、状態遷移グラフの可視化は有効だと思われます。

#手順
 1. DCノードのpengineのログから確認する状態遷移ファイル(pe-XXXXX.bz2)を確認します。
  - 状態遷移は数回計算される場合もあるので、確認したい計算時の状態ファイルを確認する必要があります。

```
Sep 15 08:19:22 node1 crmd[1571]:     info: do_te_invoke: Processing graph 3 (ref=pe_calc-dc-1442272762-18) derived from /var/lib/pacemaker/pengine/pe-input-3.bz2
```

 2. 確認したbz2ファイルを展開します。

```
[root@node1 ~]# cp /var/lib/pacemaker/pengine/pe-input-3.bz2 .
[root@node1 ~]# bunzip2 pe-input-3.bz2 
```

 3. 展開したファイルをcrm_simulateコマンドでdotファイル化に変換します。
  - -xで展開ファイル、-Dでdotファイルを指定します。

```
[root@node1 ~]# crm_simulate -x pe-input-3 -D pe-input-3.dot
(snip)
[root@node1 ~]# ls pe-input-3.dot 
pe-input-3.dot

```

 4. graphvizなどのツールでdotファイルを見ることが出来ます。
  - 下記はwindows版のgraphvizのgveditで変換表示した例です。
  - 黒文字の丸は、実行される操作を意味します。
  - 橙文字の丸は、実行される操作の待ち合わせなどに利用される疑似的な操作を意味します
  - 矢印は、実行順を意味します。（複数の矢印が入ってくる丸の操作は、複数の操作の完了を待つことになります）
  - 矢印がループ（下から上に戻るなど）している場合は、pengineの不具合の可能性がありますので、本家のMLに報告してください。
 
![pe-input-3.png](https://qiita-image-store.s3.amazonaws.com/0/80018/59bf9fff-ec12-9a06-1ab1-dd1539c6a98f.png)

  - マニュアルでは、さらに詳細に以下の記載がされています

```
Graphvizの出力を解釈する

矢印は順序依存性を示します
破線の矢印は、遷移グラフに存在しない依存関係を示す
任意の色の破線の枠線を持つアクションは、遷移グラフの一部を形成しません
トランジショングラフの一部を緑色の枠で囲むアクション
赤い枠線を持つアクションは、クラスタが実行したいが実行できないものです
青色の境界線を持つアクションは、クラスタが実行する必要がないと感じるアクションです
オレンジテキストのアクションは、クラスタがグラフを単純化するために使用する擬似/擬似アクションです
黒いテキストのアクションがLRMに送信されます
リソースアクションには、rsc_ action_interval node
赤い枠線を持つアクションに応じたアクションは実行できません。
ループは本当に悪いです。それらを開発チームに報告してください。
```

#注意
状態遷移ファイルがあれば(bzファイル)、Pacemakerが起動していなくとも、crm_simulateの実行などグラフ化は可能です。
上記の説明は、Pacemaker1.1系で記述しています。
Pacemaker1.0系には、同様の可視化コマンドとしてptestコマンドが利用できます。
 - ただし、bzファイルの中身は、1.1系と1.0系では異なる部分がある為、互換性はありません。