New Relic Infrastructure AgentでログをNew Relic Logsに送信してみる

New Relic のサービスについてはNew Relic APM、New Relic Synthetics 等様々なサービスがありますが、
今回は インフラ監視サービスである、New Relic Infrastructure の agent を利用してログの転送が非常に簡単に出来た為、記事にまとめて見ようと思います。

#まず、New Relic Infrastructureとは
New Relic Infrastructure インフラ監視のサービスであり、サーバーリソースのメトリクス（cpu,メモリ,ディスク,プロセス） はもちろん、ネットワークの負荷状況やインストールされているパッケージ情報,サーバのイベント情報（いつ、誰がマシンにログインしたか、何のパッケージをインストールしたか等）などの情報を、Infrastructure Agent の導入や様々なサービスとのインテグレーションを実施する事でデータの収集・監視などを行う事が出来ます。
##インテグレーションの種類
インテグレーションの種類は大きく「クラウドインテグレーション」と「オンホストインテグレーション」に分かれます。
###クラウドインテグレーション
AWS、GCP等のクラウドサービスとインテグレーションを行いデータを収集することが出来ます。
AWSインテグレーションにおいても様々なサービスに対応しており、Amazon CloudWatch APIを使用して、モニタリングするAWSサービスからメトリックスを取得します。
[AWSインテグレーションリスト](https://docs.newrelic.co.jp/docs/integrations/amazon-integrations/aws-integrations-list)

###オンホストインテグレーション
エージェントをインストールして取得されるメトリクスに加えて、オンホストインテグレーションを実施する事により、
Kubernetes、Redis、Apache、MySQLなどの一般的なサービスや、Windowsのイベントログ・VMwareに至るまで様々なサービス独自のメトリクスを収集し監視する事が可能となります。
[オンホストインテグレーションリスト](https://docs.newrelic.co.jp/docs/integrations/host-integrations/host-integrations-list)

#ログ転送の実施
##インストールした環境
- EC2
- Amazon Linux2

##エージェントのインストール
エージェントのインストールは下記通り数ステップで簡単にインストールする事が出来ます。

```
# 設定ファイルを作成しライセンスキーを追加
echo "license_key: xxxxxxxxxxx" | sudo tee -a /etc/newrelic-infra.yml && \
# yumリポジトリを作成
sudo curl -o /etc/yum.repos.d/newrelic-infra.repo https://download.newrelic.com/infrastructure_agent/linux/yum/el/7/x86_64/newrelic-infra.repo && \
# yumキャッシュを更新
sudo yum -q makecache -y --disablerepo='*' --enablerepo='newrelic-infra' && \
# yumイントールを実施
sudo yum install newrelic-infra -y
```

AmzonLinuxに導入する場合、エージェントの導入自体は1,2共にサポートされていますが、
ログ転送機能はAmazon Linux2のみサポートされているようです。
その他下記通りの条件があります。

- エージェントのバージョンは1.11.4以降
- Windowsの場合は、最新のVisual C++再配布可能パッケージのインストールが必要

##ログ転送設定
エージェントのインストール後にすでにサンプルの設定ファイルが準備されている状態になっています。

```
# cd /etc/newrelic-infra/logging.d/
total 24
-rw-r--r-- 1 root root 1664 Nov 17 12:41 file.yml.example
-rw-r--r-- 1 root root 1173 Nov 17 12:41 fluentbit.yml.example
-rw-r--r-- 1 root root 2762 Nov 17 12:41 syslog.yml.example
-rw-r--r-- 1 root root  930 Nov 17 12:41 systemd.yml.example
-rw-r--r-- 1 root root 1097 Nov 17 12:41 tcp.yml.example
```
設定ファイルをyaml形式で作成し、以下の内容で保存してみます。

```
logs:
- name: "messages"
  file: /var/log/messages
- name: "secure"
  file: /var/log/secure
- name: "cron"
  file: /var/log/cron
```
YAMLファイルの項目としては他にも下記通りの項目が利用できます。

- systemd：systemd のサービス名を指定する事で、journald デーモンからログメッセージが収集されます。
- folder：ログのディレクトリパスを指定します。
- pattern：正規表現で転送されるログをフィルタリングする事ができます。
- max_line_kb：ログエントリ/行の最大サイズ（KB単位）を指定します。

ファイルの他に、WindowsイベントログやTCP,fluentbitの設定ファイルを指定する方法もあります。

##ログ転送確認
New Relic Logs を確認すると先ほど設定したログが転送されている事が確認できます。
エージェントの再起動は不要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82716/67701191-be71-c9a3-33b9-5a4de879f352.png)
転送されたデータを利用し、ダッシュボードを作成したり、アラートを作成しログ監視を行う事も可能です。

##S3からログ転送
Lambdaを利用してS3からログ転送する事もできるようなので試してみました。
AWS Serverless Application Repository にLambdaが公開されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82716/968e11f7-2f22-d99a-bed5-aaa98641af0f.png)
AWS Serverless Application Repository から「カスタムIAMロールmまたはリソースポリシー・・」にチェックを入れ、「NewRelic-log-ingestion-s3」を検索します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82716/09ca246b-fda7-754e-6934-5cd3a612f0da.png)
続いて、「NRlicenseKey」を入力し、デプロイを行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82716/9347a9ae-7788-720c-8991-e56673df8a64.png)
デプロイ後、cloudformationスタックが作成されています。
完了後lambda関数が作成されてるので、トリガーの設定を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82716/52f5729c-1839-e7a5-9b5a-6ca296c66574.png)
トリガーの設定で、対象のS3バケット、プレフィックス等を指定して、トリガーを追加します。
今回はELBのログを指定してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82716/1edfe28f-fc6e-44d6-a049-f451ce74f5a1.png)
New Relic Logs にて ELBのログが転送されている事が確認できました。
削除する場合はCloudformationのスタックを削除して下さい。

s3からのログ転送に加えてCloudWatch logsやLogstashプラグインなど、他にも色々あるようなので、また試してみたいと思います！