Contents
AnsibleでESXiのサポートログが取得できると便利だと思いモジュールを作ったのでVMwareのCollectionにマージしてもらったのでログ取得モジュールの使い方について説明したいと思います。
ESXiのサポートログ取得モジュール
vmware_host_logbundle
はESXiのサポートログを取得するモジュールです。
vmware_host_logbundle_info
は vmware_host_logbundle
で取得する対象のログのmanifest情報を取得するモジュールです。
利用シーンのイメージ
ログ取りの作業って結構めんどかったり台数に比例して結構時間がかかったりと不要な時間の消費になっちゃうんですよね。
例えば複数のシステムがVMware環境で構築されていてvCenter毎に分かれたりすると、結構大変です。
GUIでポチポチしようとすると
- vCenter(またはESXi)にログインして
- 対象のESXi選択して
- ログダウンロードして
- また、別のvCenterにログインして
- (略
みたいな感じになると思います。
これをAnsibleで自動化するとこんなイメージになります。
このように複数のvCenterで管理されてるESXiからサポートログのダウンロードが一気に出来ると作業間短縮になって便利かなと思います(またはESXi直で) 🙂
ログダウンロード用のPlaybookテンプレートを作っていてAnsible TowerやAWXに登録しておけば、オペレーターの人でも簡単に且つ一気に対象のESXiのログが効率よく取得できます。
ESXiのサポートログ取得方法
最新版のVMware Collectionを使ってESXiのサポートログを取得するやり方について説明します。
環境
項目 | バージョン |
---|---|
Ansible | 2.10.0.dev0 |
VMware Collection | 最新版 |
Python | 3.6.8 |
リポジトリのクローン
AnsibleとVMware Collectionのリポジトリをクローンします。
1 2 3 |
[root@localhost log]# git clone https://github.com/ansible/ansible.git [root@localhost log]# git clone https://github.com/ansible-collections/vmware.git collections/ansible_collections/community/vmware |
Ansibleの有効化
venvを作ってAnsible(2.10.0.dev0)を使えるようにします。
1 2 3 4 5 6 7 8 9 10 |
[root@localhost log]# cd ansible/ [root@localhost ansible]# python3 -m venv venv [root@localhost ansible]# . venv/bin/activate (venv) [root@localhost ansible]# pip install -r requirements.txt pyvmomi (venv) [root@localhost ansible]# . hacking/env-setup (venv) [root@localhost ansible]# ansible --version ansible 2.10.0.dev0 (snip) (venv) [root@localhost ansible]# cd .. |
Playbookの作成
次のPlaybookを作成します。
ここでは、manifestを指定せずにデフォルトの状態でログを取得してみます。
1 2 |
(venv) [root@localhost log]# vi example.yml |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
--- - name: example playbook hosts: all gather_facts: no collections: - community.vmware tasks: - name: Fetch a support logbundle for ESXi vmware_host_logbundle: hostname: "{{ vcenter_hostname }}" username: "{{ vcenter_username }}" password: "{{ vcenter_password }}" validate_certs: no esxi_hostname: "{{ inventory_hostname }}" dest: "{{ lookup('pipe', 'date +%Y%M%d') }}_{{ inventory_hostname }}.tgz" register: result - debug: var=result |
パラメーター | 説明 |
---|---|
esxi_hostname | サポートログを取得するESXi |
dest | サポートログを保存するパスとファイル名 |
Inventoryの作成
インベントリを作成します。
以下のインベントリ例は次の通りです。
- system01グループ
esxi-08.local
とesxi-12.local
のESXiホストが所属しています- このESXiは
vcenter04.local
で管理しているので、その認証情報を変数で指定しています
- system02グループ
esxi-test-01.local
とesxi-test-02.local
のESXiホストが所属しています- このESXiは
vcenter-test01.local
で管理しているので、その認証情報を変数で指定しています
※ESXiはAnsibleを実行するホストから名前解決できる必要があります
1 2 |
(venv) [root@localhost log]# vi inventory.yml |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
--- all: children: system01: hosts: esxi-08.local: esxi-12.local: vars: vcenter_hostname: vcenter04.local vcenter_username: administrator@vsphere.local vcenter_password: secret ansible_connection: local system02: hosts: esxi-test-01.local: esxi-test-02.local: vars: vcenter_hostname: vcenter-test01.local vcenter_username: administrator@vsphere.local vcenter_password: secret ansible_connection: local |
サポートログ取得の実行
これを実行してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
(venv) [root@localhost log]# ansible-playbook example.yml -i inventory.yml [WARNING]: You are running the development version of Ansible. You should only run Ansible from "devel" if you are modifying the Ansible engine, or trying out features under development. This is a rapidly changing source of code and can become unstable at any point. PLAY [example playbook] ********************************************************************************************************************************************************* TASK [Fetch a support logbundle for ESXi] ***************************************************************************************************************************************** changed: [esxi-12.local] changed: [esxi-08.local] changed: [esxi-test-02.local] changed: [esxi-test-01.local] (snip) PLAY RECAP ********************************************************************************************************************************************************************** esxi-08.local : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 esxi-12.local : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 esxi-test-01.local : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 esxi-test-02.local : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |
サポートログが取得できました 🙂
1 2 3 |
(venv) [root@localhost log]# ls 20200216_esxi-* 20200216_esxi-08.local.tgz 20200216_esxi-12.local.tgz 20200216_esxi-test-01.local.tgz 20200216_esxi-test-02.local.tgz |
manifestについて
次にログの種類を指定して取得してみたいと思います。
manifestとは?
サポートログのmanifestは以下の赤枠で囲っている部分です。
ESXiのサポートログを取得したことある人であれば知ってると思います。
vmware_host_logbundle
でmanifestを指定することで取得対象のログの範囲を決めることができます。
指定できるmanifestはESXi/vCenterのバージョンによって異なるため vmware_host_logbundle_info
で確認します。
manifest playbook作成
manifest情報を取得するplaybookを作成します。
1 2 |
(venv) [root@localhost log]# vi example.yml |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
--- - name: example playbook hosts: all gather_facts: no collections: - community.vmware tasks: - name: Fetch a support logbundle manifest information for ESXi vmware_host_logbundle_info: hostname: "{{ vcenter_hostname }}" username: "{{ vcenter_username }}" password: "{{ vcenter_password }}" validate_certs: no esxi_hostname: "{{ inventory_hostname }}" register: result - name: Create manifest file copy: content: "{{ result.manifests | to_nice_json }}" dest: "{{ inventory_hostname }}.json" |
manifest取得の実行
これを実行してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
(venv) [root@localhost log]# ansible-playbook example.yml -i inventory.yml (snip) TASK [Fetch a support logbundle manifest information for ESXi] ******************************************************************************************************************************** ok: [esxi-12.local] ok: [esxi-08.local] ok: [esxi-test-02.local] ok: [esxi-test-01.local] TASK [copy] ********************************************************************************************************************************************************************* changed: [esxi-12.local] changed: [esxi-08.local] changed: [esxi-test-01.local] changed: [esxi-test-02.local] PLAY RECAP ********************************************************************************************************************************************************************** esxi-08.local : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 esxi-12.local : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 esxi-test-01.local : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 esxi-test-02.local : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |
manifestの確認
取得したmanifest情報を確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
[ { "enabled": "true", "group": "System", "id": "System:Base", "name": "Base", "vmOnly": "false" }, { "enabled": "false", "group": "System", "id": "System:BaseMinmal", "name": "BaseMinmal", "vmOnly": "false" }, { "enabled": "true", "group": "Fcd", "id": "Fcd:Catalog", "name": "Catalog", "vmOnly": "false" }, (snip) ] |
ここで確認する部分は id
です。
例えばSystemのBaseを取得対象としたい場合は System:Base
となります。
manifestを指定したplaybookの作成
以下のように manifests
パラメーターに取得するサポートログに含めたい対象をリストで指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
--- - name: example playbook hosts: all gather_facts: no collections: - community.vmware tasks: - name: Fetch a support logbundle for ESXi vmware_host_logbundle: hostname: "{{ vcenter_hostname }}" username: "{{ vcenter_username }}" password: "{{ vcenter_password }}" validate_certs: no esxi_hostname: "{{ inventory_hostname }}" manifests: - System:Base - System:CoreDumps - VirtualMachines:base dest: "{{ lookup('pipe', 'date +%Y%M%d') }}_{{ inventory_hostname }}.tgz" register: result - debug: var=result |
これを実行すると指定したmanifestのみが含まれたサポートログのアーカイブが取得できます。
manifestはESXi/vCenterのバージョンで異なるので、それぞれのバージョンにあったPlaybookをテンプレートとして作っておくといいかと思います。
ちなみに、カンのいい人は既に分かったかもしれませんが、manifestはGUI上からも確認できます。
System:Base
System:CoreDumps
など以下画像にもありますね。
最後に補足ですがvCenter経由ではなくESXiを直接指定したい場合は hostname
username
password
にESXi情報を指定してください 🙂