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