Flume實例一 | 監控服務器Lynis日誌上傳hdfs | 監控目錄上傳hdfs


由於lynis的日誌是直接覆蓋原來的文件,似乎無法通過flume的exec等source對其進行監控(我寫的agent都shut down了)。如果有同學成功了並且願意分享的話,我不甚感激。
所以我的嘗試以下:
思路爲,通過shell監控lynis日誌目錄,如果有新日誌以時間命名的方式就存儲在目標目錄/var/log/lynis/cp_logs中,再通過Spooling Directory Sourceflume agent對目錄進行監控。

實現功能:

shell腳本監控lynis日誌目錄:如果日誌被修改將日誌存儲在指定目錄下。
並通過flume的spooldir sources監控指定目錄,利用hdfs sink將檢測到的數據sink到hdfs上

配置文件

cd "flume目錄"
  • 創建指定目錄,以及文件
mkdir -p conf/Inventory/Lynis/
vim conf/Inventory/Lynis/lynis.properties
  • lynis.properties
#a1表示代理名稱
a1.sources=s1
a1.sinks=k1
a1.channels=c1

# 配置source1  監控目錄是否有文件數據生成
a1.sources.s1.type=spooldir
a1.sources.s1.spoolDir=/var/log/lynis/cp_logs
a1.sources.s1.channels=c1
a1.sources.s1.fileHeader = true
# a1.sources.s1.interceptors = i1
# a1.sources.s1.interceptors.i1.type = timestamp

#配置sink1  將檢測到的數據sink到hdfs上
a1.sinks.k1.type=hdfs
a1.sinks.k1.hdfs.path=hdfs://master:9000/flume/lynis/%Y-%m-%d-%H
a1.sinks.k1.hdfs.fileType=DataStream
a1.sinks.k1.hdfs.writeFormat=TEXT
## 每隔60s或者文件大小超過100KB的時候產生新文件
# hdfs創建多長時間新建文件,0不基於時間
a1.sinks.k1.hdfs.rollInterval=10
# hdfs有多少條消息時新建文件,0不基於消息個數
a1.sinks.k1.hdfs.rollCount=0
# hdfs多大時新建文件,0不基於文件大小
a1.sinks.k1.hdfs.rollSize=0
# 當目前被打開的臨時文件在該參數指定的時間(秒)內,沒有任何數據寫入,則將該臨時文件關閉並重命名成目標文件
a1.sinks.k1.hdfs.idleTimeout=3
a1.sinks.k1.channel=c1
#時間參數一定要帶上 true
a1.sinks.k1.hdfs.useLocalTimeStamp=true
# a1.sinks.k1.hdfs.filePrefix=%Y-%m-%d
## 每五分鐘生成一個目錄:
# 是否啓用時間上的”捨棄”,這裏的”捨棄”,類似於”四捨五入”,後面再介紹。如果啓用,則會影響除了%t的其他所有時間表達式
a1.sinks.k1.hdfs.round=true
# 時間上進行“捨棄”的值;
a1.sinks.k1.hdfs.roundValue=5
# 時間上進行”捨棄”的單位,包含:second,minute,hour
a1.sinks.k1.hdfs.roundUnit=hour

#通道是以文件方式存儲
#配置channel1
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100

shell

# root權限下:
mkdir -p /var/log/lynis/tools
# 更改用戶所有者
chown -R hadoop /var/log/lynis

/var/log/lynis/tools創建lynis_tool.sh

#!/bin/bash
fun(){
ls -lu /var/log/lynis.log > ./cur.log
diff ./cur.log ./pre.log > ./diff.log
if [ $? -ne 0 ]
then
cp -f /var/log/lynis.log  ./pre.log
file_name=`date "+%Y-%m-%d-%H:%M:%S"`
echo ${file_name}.log
cp -fp /var/log/lynis.log /var/log/lynis/cp_logs/${file_name}.log
fi	
}

if [ ! -d "/var/log/lynis/tools" ]
then
mkdir -p /var/log/lynis/tools
fi
if [ ! -d "/var/log/lynis/cp_logs" ]
then
mkdir -p /var/log/lynis/cp_logs
fi
echo "lynis tool started"
echo > ./pre.log
while true
do
    fun
    sleep 60
done

啓動命令

  • 啓動hdfs。
hadoop fs -mkdir -p /flume/lynis
  • 啓動flume
bin/flume-ng agent --name a1  --conf conf  --conf-file conf/Inventory/Lynis/lynis.properties 
  • 其中--name參數對應,lynis.properties中的代理名稱,--conf參數對應配置目錄,--conf-file對應剛剛創建的配置文件的目錄
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章