本記事で扱う内容の概要
• 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 の一部)
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を作成
Agent ClassのNameを入力
もしなにか微調整したい場合、上記画面の【Show Advanced Configurations】をチェックする。
これで、デプロイ先のサーバーで実行したらMiNiFiエージェントがインストールされます。
例:
[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を選ぶ。
SYSLOG受信ですので、ListenSyslogプロセッサーを選ぶ。
SYSLOG受信関連の設定はプロセッサーをダブルクリックして実施。
クラウド上にあるNiFiクラスタに送信するため、[Remote Processor Group]を選択。
その後、ListenSyslogとRemote Processor Groupをつなぐ
これでAgent側の設定が完了。
次はCloud側にある受信するNiFiクラスタの設定を実施。
5. 受信する側のNiFiのデータフロー設計
Port Name=syslog01にします。
これは前の4.2のRemote Processor Groupの接続先として利用されるものです。
Input Portで受け取ったデータをマージしてS3に出力します。
6. まとめ
MiNiFi と EFM を組み合わせることで、エッジデバイスからの SYSLOG 収集・処理を統合的に管理できます。特に以下の点がメリットです。
• 軽量かつ柔軟: リソース制限が厳しい環境でも動作可能
• 集中管理: 多数のエージェントを一括でモニタリング・デプロイできる
• 拡張性: NiFi や他のシステムと連携し、複雑なデータフローや高度な分析に発展させられる
本記事を参考に、エッジでの SYSLOG 収集や IoT 環境のログ管理を効率的に行い、さらにクラウド側の NiFi クラスターやデータストアへスムーズにつないでいきましょう。
6.1. 各SYSLOGから送信
• SYSLOG を送信する Linux サーバー (syslog などの設定)にMiNiFiを入れる
• MiNiFiの送信先はクラウド上にあるNiFiクラスタ