MiNiFi/Edge Flow Managerで、SYSLOGをデータを集めてくる

# 本記事で扱う内容の概要
•	MiNiFi関連の簡単な紹介
•	MiNiFi での SYSLOG データの受信方法
•	EFM からのエージェント管理およびフローの設計・デプロイ手順
•	典型的なユースケース・応用例

# 1. はじめに

## SYSLOG とは？
SYSLOGはネットワーク機器やサーバーなど、さまざまなシステムが出力するログを統合管理できる仕組みです。


## Apache MiNiFiとは
Apache MiNiFi は、Apache NiFi の軽量版エージェントであり、IoTデバイスやエッジ環境などリソースが限られた環境でデータフローを実行するために設計されたツールです。

Apache MiNiFi は エッジでのデータの収集と処理に特化しています。各デバイス・端末にインストールされるApache MiNiFi エージェントには、Apache NiFi の機能をすべて備えた MiNiFi Java エージェントと、フットプリントが非常に小さい MiNiFi C++ エージェントの2種類があります。

## Edge Flow Manager(EFM)とは
Edge Flow Manager (EFM) は、ローコードで数千もの MiNiFi エージェント向けエッジフローアプリケーションを設計・デプロイ・監視できる`エージェント管理ハブ`です。エッジに配置されたすべての MiNiFi エージェントを一元的に管理・監視でき、エッジフローのライフサイクル（作成、配備、監視）を包括的にサポートします。


# 2. システムアーキテクチャの概要
## 全体像


•	ネットワーク機器やサーバー → SYSLOG/SYSLOG → MiNiFi エージェント → (クラスタ NiFi / Kafka / データストアなど)
•	EFM はフローの設計・デプロイ・監視を担当
•	前提条件・利用するコンポーネント
•	SYSLOG 発生源（例：Linux サーバー、ネットワークルータなど）
•	MiNiFi エージェント (Java または C++)
•	EFM サーバー (Cloudera Edge Management の一部)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/064b42a9-ae58-7ee4-4601-2f03888b9f81.png)


# 3. MiNiFi のセットアップ
## 3.1.	MiNiFi の種類
•	MiNiFi Java エージェント
Apache NiFi の基本機能を JVM 上で動作させる軽量エージェントです。
NiFi と同様のプロセッサが豊富に利用できるため、柔軟な処理ロジックをエッジに近い場所で実行できます。
また、軽量化のため、MiNiFiにデフォルトで入れているプロセッサーは少ないですが、
MiNiFiに最初入れていないプロセッサーは後でNiFiからコピーしてから利用することが可能です。

•	MiNiFi C++ エージェント
C++ で実装された超軽量エージェント。
Java版と比べて、メモリや CPU リソースが限られた環境でも動作しやすい設計になっています。
Java 版ほど豊富なプロセッサは用意されていないため、実装できる機能にやや制限があるが、リソースが限られている環境で動くハードルが低いです。
例えば、Raspberry Pi や小型組み込みボードなど、非常に限られたリソース環境でデータ収集を行う場合。
インストール環境も工場の制御装置や遠隔地の IoT デバイスなど、JVM の導入が難しい機器も考えられます。

## 3.2.	SYSLOG 処理に必要なプロセッサの概要
•	ListenSyslog などの SYSLOG 受信用プロセッサ
•	ログフォーマットのパース（ParseSyslog などを利用する場合）



# 4. Edge Flow Manager (EFM) の設定
## 4.1.	EFMでMiNiFiエージェントの登録
  左側のMonitorメニューをクリックする。
  New Agent Classボタンを押して、新しいAgent Classを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/26699943-70b4-5c8b-a482-53fc8a0802e7.png)
Agent ClassのNameを入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/f8f55bd5-8af6-08fe-3f24-b5f04193abd3.png)

保存したら、下記画面になる：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/e7f99a34-45e3-4008-5fb7-ebad6f5987a2.png)


JavaエージェントのMiNiFiを配るコマンドを生成：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/aafec90c-87d8-a716-d83b-d58e18e29193.png)

もしなにか微調整したい場合、上記画面の【Show Advanced Configurations】をチェックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/4f3eedc0-4a58-6d27-b573-72c1774a7611.png)

これで、デプロイ先のサーバーで実行したらMiNiFiエージェントがインストールされます。

例：

```bash

[root@zzeng-efm-management0 ~]# curl -L -k \
>  -u "060a30a6-49da-49f1-9628-9eea58fdc81f:f7f5847a-998b-4f25-a5b8-******" \
>  -d accessKey=060a30a6-49da-49f1-9628-****** \
>  -d agentClass=syslog01 \
>  -d agentIdentifier=3ca3e2a5-ea04-4eb5-****** \
>  -d agentType=cpp \
>  -d agentVersion=1.24.05 \
>  -d autoConfigureSecurity=true \
>  -d baseUrl=https%3A%2F%2Fzzeng-efm-management0.*****.****.cloudera.site%3A10090%2Fefm%2Fapi \
>  -d hbPeriod=5000 \
>  -d osArch=linux \
>  -d secret=f7f5847a-998b****-53130d4bc39d \
>  -d serviceName=minifi \
>  -d serviceUser=minifi \
>  -d trustSelfSignedCertificates=true \
>  https://zzeng-efm-management0.*****.cloudera.site:10090/efm/api/agent-deployer/script | bash -
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 15701  100 15281  100   420  48205   1324 --:--:-- --:--:-- --:--:-- 49374
 _______ __ _______ __ _______ __      __             __         __ __
|   |   |__|    |  |__|    ___|__|    |__.-----.-----|  |_.---.-|  |  .-----.----.
|       |  |       |  |    ___|  |    |  |     |__ --|   _|  _  |  |  |  -__|   _|
|__|_|__|__|__|____|__|___|   |__|    |__|__|__|_____|____|___._|__|__|_____|__|

-- Verifying if the following commands exist: tar cat grep sed seq mkdir sleep id
-- Checking if minifi service exists...
-- Verifying if the system is capable of handling tar.gz archives...
-- Looking for a download utility on the system...
-- > curl
-- curl version: 7.61.1
-- Downloading MiNiFi...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 26.4M  100 26.4M    0     0  58.3M      0 --:--:-- --:--:-- --:--:-- 58.3M
-- MiNiFi has been downloaded to directory: nifi-minifi-cpp-1.24.05
-- Downloading security bundle...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  137k    0  137k    0     0   372k      0 --:--:-- --:--:-- --:--:--  372k
-- Security bundle has been downloaded to directory: nifi-minifi-cpp-1.24.05/conf
-- Configuring MiNiFi...
-- Checking if minifi service exists...
-- Attempting to install MiNiFi as a system service: minifi ...
Uninstalling any previous versions
Installing MiNiFi as a systemd service to /usr/local/lib/systemd/system
'/root/nifi-minifi-cpp-1.24.05/bin/minifi.service' -> '/usr/local/lib/systemd/system/minifi.service'
Service minifi installed. Please start it using 'minifi.sh start'
-- Attempting to start service...
-- OK
-- Waiting until MiNiFi is up...
-- OK

  MiNiFi has been installed as a system service, and it's already running.

  You can stop it with one of the commands below, depending on what
  service management software is installed on the system.

    %> cd "nifi-minifi-cpp-1.24.05"
    %> bin/minifi.sh stop

  To start again:

    %> cd "nifi-minifi-cpp-1.24.05"
    %> bin/minifi.sh start

-- Installation has successfully completed.

  In addition of the existing (default) configuration values, the followings have been applied:

  ---
nifi.c2.agent.class=syslog01
nifi.c2.agent.heartbeat.period=5000
nifi.c2.agent.identifier=3ca3e2a5-ea04-4eb5-aa5e-13f6cdff004f
nifi.c2.enable=true
nifi.c2.rest.path.acknowledge=/c2-protocol/acknowledge
nifi.c2.rest.path.base=https://zzeng-efm-management0.****.cloudera.site:10090/efm/api
nifi.c2.rest.path.heartbeat=/c2-protocol/heartbeat
nifi.c2.rest.url.ack=https://zzeng-efm-management0.*****.cloudera.site:10090/efm/api/c2-protocol/acknowledge
nifi.c2.rest.url=https://zzeng-efm-management0.zzengaws.*****.cloudera.site:10090/efm/api/c2-protocol/heartbeat
nifi.remote.input.secure=true
nifi.security.client.ca.certificate=./conf/ca-cert.pem
nifi.security.client.certificate=./conf/agent-cert.pem
nifi.security.client.pass.phrase=./conf/password
nifi.security.client.private.key=./conf/agent-key.pem
nifi.security.need.ClientAuth=true
  ---

  If you would like to modify this configuration, you need to perform these steps:

    1) Stop MiNiFi
    2) Edit the files located in "nifi-minifi-cpp-1.24.05/conf"
    3) Start MiNiFi

[root@zzeng-efm-management0 ~]#

```

## 4.2.	EFMでのデータフロー設計
EFMにログインした後、Designメニューに遷移し、対象のAgent Classを選ぶ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/b1468a05-f2b0-46bb-01a4-87db197a77c2.png)

[Processor] を画面に持ってくる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/b2013a64-3526-d297-f6b2-606afed132f5.png)

SYSLOG受信ですので、ListenSyslogプロセッサーを選ぶ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/92f27e9e-d788-3800-2648-6d4c1a90b259.png)


SYSLOG受信関連の設定はプロセッサーをダブルクリックして実施。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/009bfb04-3215-7be2-1d5f-30ae3d623a08.png)



クラウド上にあるNiFiクラスタに送信するため、[Remote Processor Group]を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/2b43c9db-d0f5-83ca-450d-8fb6e21b5162.png)

その後、ListenSyslogとRemote Processor Groupをつなぐ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/62be45f0-a528-68bf-429e-0eef32abeb88.png)

これでAgent側の設定が完了。

次はCloud側にある受信するNiFiクラスタの設定を実施。

# 5.	受信する側のNiFiのデータフロー設計
まずはInput Portを入れる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/c0b041a0-3e37-b88d-adc3-a1327dc11712.png)

Port Name=syslog01にします。
これは前の4.2のRemote Processor Groupの接続先として利用されるものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/644fb7eb-4611-a0f4-5e36-31e4d697daf1.png)

Input Portで受け取ったデータをマージしてS3に出力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/775b505f-9ea9-1a14-241f-28e25378d30e.png)


# 6. まとめ
MiNiFi と EFM を組み合わせることで、エッジデバイスからの SYSLOG 収集・処理を統合的に管理できます。特に以下の点がメリットです。
•	軽量かつ柔軟: リソース制限が厳しい環境でも動作可能
•	集中管理: 多数のエージェントを一括でモニタリング・デプロイできる
•	拡張性: NiFi や他のシステムと連携し、複雑なデータフローや高度な分析に発展させられる

本記事を参考に、エッジでの SYSLOG 収集や IoT 環境のログ管理を効率的に行い、さらにクラウド側の NiFi クラスターやデータストアへスムーズにつないでいきましょう。
## 6.1.	各SYSLOGから送信
•	SYSLOG を送信する Linux サーバー (syslog などの設定)にMiNiFiを入れる
•	MiNiFiの送信先はクラウド上にあるNiFiクラスタ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/ceb641bd-968d-c61c-8398-3ea327eede19.png)


## 6.2.	NiFiサーバーが受信
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/775b505f-9ea9-1a14-241f-28e25378d30e.png)