LogDNA で IBM Cloud のログ監視をしてみた

# TL;DR
IBM Cloudと統合されたログ収集プラットフォームLogDNAを使ってIBM Cloud IaaSのVirtual Server Instance（仮想サーバー）上のRHEL7のOSログ監視をしてみました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/63451/9ff2af7b-33bf-9f1d-ee5b-9fbe5b01c6d1.png)

# LogDNAって何？
LogDNAは2015年に米カリフォルニア州マウンテンビューで設立されたSaaS型のログ収集プラットフォームです。

- システムおよびアプリケーションの問題をデバッグするためのログ管理および分析
- 最新のコンテナベースのアプリケーションに最適化
- 何百ものカスタム統合を使用してあらゆるプラットフォームから収集および集約する機能
- SaaSと分離/オンプレミスへのデプロイ・オプション
- 1,500の有料顧客あり
- ロゴ：
![image.png](https://qiita-image-store.s3.amazonaws.com/0/63451/c85c0c69-d2bb-260f-9f6e-8da28cdca2fd.png)

LogDNAは、以下のような特長を持っています。

- スタンダードなElasticよりもスケーラビリティのある高速検索
- HIPAAとSOC2に準拠、GDPR/PCI-DSSにも対応（予定）
- 電子メール、Slack、HipChat、Webhook、PagerDuty、OpsGenieとのアラート統合
- Google検索のような簡易検索
- ログ・テーリング
- IBM Cloud、Heroku、Manifoldといったクラウド・ベンダーとの統合

IBM Cloudと統合されたLogDNAを使うと以下のようなメリットがあります。

- 完全集中型ログ管理：すべてのログデータを一箇所に集約
- 柔軟な保存期間：ログ検索のための7、14および30日
- リアルタイムのライブテールおよびフィルタ機能でログイベントを拡大
- 自然言語クエリと超高速検索で問題を迅速に見つけて解決
- Pager Duty、Slack、Webhook、Webhookなどによる通知サポートを使用してアラートを実行
- 30を超える統合と管理対象ソースをサポート
- コンテナ・ベースのアプリケーションに最適化
- GB単位の料金
- IBM CloudのSSOによるエンタープライズグレードの管理、および管理者に対する完全なRBACを提供
- 長期保管のためにIBM Cloud Object Storageにアーカイブ
- アーキテクチャ：
![image.png](https://qiita-image-store.s3.amazonaws.com/0/63451/48c8d5fb-7807-b44c-4f21-a718c43dde47.png)

（参考）IBM Log Analysis with LogDNA 
https://www.ibm.com/cloud/log-analysis

# LogDNAのオーダー
IBM IDでログインして以下よりオーダーします。
https://cloud.ibm.com/catalog?search=LogDNA
<img width="817" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/658f3113-7e37-1120-fcf6-2713ace3100e.png">

サービス名、リージョン、リソースグループを入力して作成ボタンをクリックします。
https://cloud.ibm.com/observe/logging/create
<img width="1200" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/76b55d58-a53d-d2bc-9099-1d572cc54204.png">

プランを以下から選択します。最初はライト版（無料）でオーダーしてみます。
<img width="572" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/471cd842-c4b9-c54a-95aa-13fb1bd695af.png">

# ネットワーク前提

LogDNA AgentからLogDNAサーバーへの発信トラフィックとして以下のパブリックIPアドレスおよびポートについて、ファイアウォールやセキュリティ・グループであらかじめ許可しておく必要があります。

- ログ送信のためのIPアドレス
    - リージョン：米国南部
    - Ingestion endpoint：logs.us-south.logging.cloud.ibm.com
    - パブリックIPアドレス：
        - 169.48.237.107
        - 169.60.166.45
        - 169.47.224.77
    - ポート：
        - TCP 443
        - TCP 80

- LogDNA agentにより利用されるIPアドレス
    - リージョン：米国南部
    - Authentication endpoint: api.us-south.logging.cloud.ibm.com
    - パブリックIPアドレス：
        - 169.47.224.74
        - 169.60.166.44
        - 169.48.237.109
    - ポート：
        - TCP 443
        - TCP 80

最新の情報は以下をご確認ください。

（参考）Managing network traffic
https://console.bluemix.net/docs/services/Log-Analysis-with-LogDNA/network.html#network

# LogDNAエージェントの設定
エージェントレスで単純にrsyslog、syslog-ng、syslogから転送することもできますが、ここではLogDNA経由で監視します。エージェントを利用することで幅広いログ収集が可能です。

オーダー後、IBM CloudのダッシュボードにLogDNAが表示されます
<img width="1246" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/65efa57b-e979-3ccf-4735-e0041b003d61.png">

エージェントは以下の環境をサポートしています。

- Linux Ubuntu/Debian
- Linux RPM-based
- Kubernetes

<img width="620" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/3aa5d9db-f824-2dac-5b3c-72718247e1f2.png">
<img width="477" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/62f5448d-2656-ba6e-2d31-f6e023e39d48.png">

今回はREHL7を管理対象とするためRPMベースのエージェントをインストールします。最初にパッケージをインポートします。

```
# sudo rpm --import https://repo.logdna.com/logdna.gpg
```

リポジトリーを設定します。

```
echo "[logdna]
name=LogDNA packages
baseurl=https://repo.logdna.com/el6/
enabled=1
gpgcheck=1
gpgkey=https://repo.logdna.com/logdna.gpg" | sudo tee /etc/yum.repos.d/logdna.repo
```

エージェントをインストールします。

```
sudo yum -y install logdna-agent
```

ダッシュボードに表示されているユニーク・キーを入力します。

```
# sudo logdna-agent -k XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Your LogDNA Ingestion Key has been successfully saved!
```

LogDNAのAPIホスト"api.us-south.logging.cloud.ibm.com"を登録します。

```
# sudo logdna-agent -s LOGDNA_APIHOST=api.us-south.logging.cloud.ibm.com
Config variable: LOGDNA_APIHOST = api.us-south.logging.cloud.ibm.com been saved to config.
```

LogDNAサーバーのホスト"logs.us-south.logging.cloud.ibm.com"を登録します。

```
# sudo logdna-agent -s LOGDNA_LOGHOST=logs.us-south.logging.cloud.ibm.com
Config variable: LOGDNA_LOGHOST = logs.us-south.logging.cloud.ibm.com been saved to config.
```

監視対象ディレクトリを登録します。デフォルトでは/var/log配下が登録されています。

```
# sudo logdna-agent -d /path/to/log/folders
Log Directories: /path/to/log/folders has been saved to config
```

エージェントに監視対象サーバーの任意のタグを設定します。ここではmytag, myothertagとしています。

```
# sudo logdna-agent -t mytag,myothertag
Tags: mytag, myothertag have been saved to config
```

LogDNAエージェントがOS起動時に自動起動するように設定します。

```
sudo chkconfig logdna-agent on
```

LogDNAエージェントを手動で起動します。

```
sudo service logdna-agent start
```

# LogDNAダッシュボードの表示

ダッシュボードの[All Sourcers]に表示される管理対象サーバーをチェックします。

<img width="1272" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/03db015b-3051-280f-9b44-4d4a79418a7b.png">

検索機能を有効化するためにプランをアップグレードします。
<img width="714" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/f23ff799-fde2-3e96-90c6-dd5ad1390d9c.png">

プランを選択します。

<img width="764" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/5849cc10-66e0-708d-53ef-0cdc161567ca.png">

OKをクリックします。

<img width="753" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/9b913a7f-5d66-e31d-d5a3-5a5e0633a041.png">

ダッシュボードを開き直します。

<img width="500" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/e4daa580-526f-3c65-a247-441ab50ece4b.png">

トライアル版から有償版に変わったことを確認します。

<img width="699" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/8ee35c76-d938-b3c5-b57c-31968e6ca121.png">

ログ・レベルを指定してログがダッシュボードに表示されることを確認します。

<img width="1270" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/97e35748-208b-28fc-c754-6810cbfe2141.png">

# LogDNAダッシュボードの見方

監視対象ログとして、audit.log, cron, logdna-agent.log, messeagesなどを指定できます。

<img width="221" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/646bd88b-7398-a59d-1aea-83577195f10a.png">

以下のようなフォーマットでログが可視化されます。

例1）"/var/log/secure"に出力されているパスワード入力エラー
<img width="602" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/b7e9bd20-4e7b-49d2-92c2-893279959b68.png">

例2）"/var/log/secure"のSSHによる不正アクセスの検知
<img width="882" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/d0e598cd-01b1-d4d5-bc1d-1a134bc6ae8b.png">

例3）"/var/log/messeage"に記録されたroot権限によるSSHログイン
<img width="969" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/25e0371e-2557-a269-5d95-07ffbcb1da3d.png">

例4）"/var/log/messeage"に記録されたタイムゾーンの変更
<img width="966" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/b3903084-bebb-a676-c084-64f0a570a08f.png">

# レポート
様々な切り口でログのレポートを取得することができます。

例）すべてのログのカウント（24時間）
<img width="1263" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/999bbf36-ba0a-090a-e248-283bf510ff74.png">

例）エラー・ログのカウント（24時間）
<img width="1265" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/0da79070-526f-8708-4499-b333013b749a.png">



# アーカイブ先
ログ・データのアーカイブ先としてはIBM Cloud Object Storage (ICOS)をはじめ各種クラウド・ストレージを指定できます。

<img width="1271" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/00b3a606-0da2-8bd4-aa86-576f646446a2.png">

ICOSをオーダーしてバケットを作成の上、必要なバケット名、エンドポイント、APIキー、インスタンスIDを入力します。

<img width="673" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/03895907-a841-4251-9ea1-5033272d51ae.png">

IBM Cloud Object Storageのエンドポイントは以下のとおりパブリック、プライベートがありますが、ここではLogDNAのアーカイブ先としてパブリック・エンドポイントを利用しています。

- jp-tok (Public): https://s3.jp-tok.cloud-object-storage.appdomain.cloud
- jp-tok (Private): https://s3.private.jp-tok.cloud-object-storage.appdomain.cloud

アーカイブとして毎晩自動的にログがエクスポートされます。設定が完了すると、エクスポートされたログは24〜48時間以内に以下のような形で表示されます。事前にICOS上にバケットを作成しておく必要があります。

<img width="991" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/8a258551-74cf-0c84-a575-92643538695a.png">

# アラート通知
[設定]->[アラート]よりSlackなど外部連携の設定が可能です。

<img width="1270" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/03d00267-62bd-bff4-ac6f-b18b74500058.png">

<img width="683" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/08e1217d-52ba-3a93-58b1-bccac250d4a8.png">

# ログのエクスポート

LogDNAのダッシュボード[Export lines]より期間を指定すればログを.jsonlファイルとしてエクスポートし管理者のメール・アドレスに転送することができます。
<img width="761" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/e9d504c5-4dc6-e028-c0f2-d6b3f92fdb95.png">

LogDNAよりデータのダウンロード・リンク付きのメールが送信されます。
<img width="894" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/16ab5ab9-6f20-d768-b546-f2fb8cab3413.png">

48時間有効なリンクからログ・ファイルをダウンロードできます。
<img width="438" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/96c9b9ff-a587-205c-412b-5da78646e133.png">

[JSON Lines](http://jsonlines.org/)は以下のようなフォーマットです。

```
{"_account":"09a8a8abfe","_cluster":"ld60","_host":"vsi-20180121","_ingester":"agent","_logtype":"syslogline","_mac":"06:87:ca:13:3b:76","_tag":["mytag","myothertag"],"_file":"/var/log/secure","_line":"polkitd[3735]: Unregistered Authentication Agent for unix-process:31232:12724202 (system bus name :1.124, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale ja_JP.UTF-8) (disconnected from bus)","_ts":1548248814652,"_app":"secure","_ip":"10.129.177.16","_ipremote":"169.56.30.124","__key":"logline:09a8a8abfe:secure:vsi-20180121:ld60","level":null,"logsource":"vsi-20180121","program":"polkitd","pid":3735,"message":"Unregistered Authentication Agent for unix-process:31232:12724202 (system bus name :1.124, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale ja_JP.UTF-8) (disconnected from bus)","_id":"1041230996311273480"}
...
```

# VRAのログ監視

仮想ルーターの[VRA (Vyatta Router Appliance)](https://cloud.ibm.com/docs/infrastructure/virtual-router-appliance/getting-started.html#-)についてもOSがLinuxベースのため同様の手順で監視できます。

エージェントはLinux Ubuntu/Debianベースのものをインストールしてください。

```
echo "deb https://repo.logdna.com stable main" | sudo tee /etc/apt/sources.list.d/logdna.list
wget -O- https://repo.logdna.com/logdna.gpg | sudo apt-key add -
sudo apt-get update
sudo apt-get install logdna-agent < "/dev/null" # this line needed for copy/paste
sudo logdna-agent -k 09a8a8abfe0765729c660345b4a0d513 # this is your unique Ingestion Key
sudo logdna-agent -s LOGDNA_APIHOST=api.us-south.logging.cloud.ibm.com # this is your API server host
sudo logdna-agent -s LOGDNA_LOGHOST=logs.us-south.logging.cloud.ibm.com # this is your Log server host
# /var/log is monitored/added by default (recursively), optionally add more dirs with:
# sudo logdna-agent -d /path/to/log/folders
# You can configure the agent to tag your hosts with:
# sudo logdna-agent -t mytag,myothertag
sudo update-rc.d logdna-agent defaults
sudo /etc/init.d/logdna-agent start
```

以下のようにリアルタイムでrsyslogのログが転送されます。

<img width="1267" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/e6ad2077-a045-4540-af6a-d65d643c9557.png">

# エージェント・レスでのログ監視　※2019年3月18日追加

エージェント・レスでもrsyslogによりsyslogを転送することが可能です。

IBM CloudのサービスからLogDNAサービスのダッシュボードを起動し、"Add log sources"をクリックしてください。

<img width="708" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/0f7ab66a-8784-a219-1ba8-17155280f20c.png">

Root CA Certificate を /etc/ld-root-ca.crt にダウンロードしてください。

```
# cd /etc
# wget https://repo.logdna.com/syslog/ld-root-ca.crt
```

22-logdna.confファイルを新規に/etc/rsyslog.d/22-logdna.confに作成してください（キーはIBM Cloud経由で起動したLogDNAのダッシュボードのものを利用します。）

```/etc/rsyslog.d/22-logdna.conf
### START LogDNA rsyslog logging directives ###

## TCP TLS only ##
$DefaultNetstreamDriverCAFile /etc/ld-root-ca.crt # trust these CAs
$ActionSendStreamDriver gtls # use gtls netstream driver
$ActionSendStreamDriverMode 1 # require TLS
$ActionSendStreamDriverAuthMode x509/name # authenticate by hostname
$ActionSendStreamDriverPermittedPeer *.us-south.logging.cloud.ibm.com
## End TCP TLS only ##

$template LogDNAFormat,"<%PRI%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msgid% [logdna@48950 key=\"********************************\"] %msg%"

# Send messages to LogDNA over TCP using the template.
*.* @@.us-south.logging.cloud.ibm.com:6514;LogDNAFormat

### END LogDNA rsyslog logging directives ###
Download this file
```

yumで"rsyslog-gnutls"をインストールしてください。

```
# yum install rsyslog-gnutls
```

"rsyslog"サービスをリスタートしてください。

```
# sudo /etc/init.d/rsyslog restart
```

以下のようにLogDNAダッシュボードに/var/log/配下のログが転送されます。

<img width="767" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/18123468-2a2a-857b-dce6-32019fe9ab2e.png">

# VMware NSX環境のSyslog転送

NSXのSyslog転送先として1台または2台のリモートSyslog サーバを設定できます。NSX Edge アプライアンスから流れるファイアウォール イベントに関連した NSX Edge のイベントとログは、Syslog サーバに送信されます。 

1. vSphere Web Client にログインします。
2. [ネットワークとセキュリティ (Networking & Security)] をクリックし、[NSX Edge (NSX Edges)] をクリックします。
3. NSX Edge をダブルクリックします。
4. [管理] > [設定] タブの順にクリックします。
5. [詳細] パネルで、Syslog サーバの横の [変更] をクリックします。
6. 両方のリモート Syslog サーバの IP アドレスを入力し、プロトコルを選択します。
7. [OK] をクリックして設定を保存します。

<img width="1267" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/4d02329a-6867-eabf-bd73-6a979a19160b.png">

※LogDNAサーバは、"syslog-a.us-south.logging.cloud.ibm.com:31372"ですがここではパブリックIPアドレスを直接入力しています。

LogDNAダッシュボードにログが転送されます。

<img width="1273" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/63451/4581b089-7c69-34f9-5ca8-cfa8fc850781.png">

# 参考リンク
公式ガイド
https://docs.logdna.com/docs

以上、簡単ですがLogDNAによるIBM Cloud IaaSの監視についての紹介でした。