分佈式日誌收集並統計分析

現在互聯網公司系統基本都是分佈式部署,應用日誌分佈在不同的機器上,不不便於分析和統計,使用Linux rsync進行日誌同步到同一臺機器進行處理

rsync 分爲服務端和客戶端

服務端用於接收同步文件,客戶端用戶發送文件到服務端

一、日誌收集

1、服務端配置:/etc/rsyncd.conf

uid = root
gid = root
use chroot = no
max connections = 0
transfer logging=no
strict modes = yes
port = 873
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /data/logs/rsync/rsyncd.log
# 需要同步的模塊,這是其中一個,可以有多個
[data]
# 同步的根目錄
path = /data/
# 忽略錯誤
ignore errors
# 只讀falsh 表示可讀可寫
read only = false
# 不可列表
list = false
# 允許訪問的網段
hosts allow = 10.0.0.0/24
# 拒絕訪問的網段
hosts deny = 0.0.0.0/32
# 用戶名
auth users = rsync_backup
# 密碼文件路徑
secrets file = /etc/rsync.password
以守護進程的方式啓動rsync
2、客戶端配置

客戶端使用crontab 設置定時任務發送文件到,指定的rsync服務端同步目錄中

0 * * * * /usr/bin/rsync -auv /xxx.log 172.10.2.111::data
二、日誌分析

將多個目錄下合併到同一個文件中,統計最近一個小時日誌文件

#!/bin/bash
ONE_HOUR_AGO=`date -d '-1hour' +%d/%b/%Y:%H`
MERGE_LOG_NAME=/data/logs/xxx-merge.log

echo $ONE_HOUR_AGO
echo $MERGE_LOG_NAME

if [ ! -f "$MERGE_LOG_NAME" ]; then
 touch "$MERGE_LOG_NAME"
fi

cat /data/logs/access_xxx.log|grep "$ONE_HOUR_AGO" >> $MERGE_LOG_NAME
cat /data/logs/access_xxx.log|grep "$ONE_HOUR_AGO" >> $MERGE_LOG_NAME
cat /data/logs/access_xxx.log|grep "$ONE_HOUR_AGO" >> $MERGE_LOG_NAME

三、郵件發送,Velocity模版

使用spring集成javamail 和 velicity模版

    <!-- spring mail -->
    <bean class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host" value="${mail.host}" />
        <property name="port" value="${mail.port}"/>
        <property name="protocol" value="${mail.protocol}"/>
        <property name="username" value="${mail.username}" />
        <property name="defaultEncoding" value="UTF-8"/>
        <property name="javaMailProperties">
            <props>
                <prop key="mail.smtp.auth">${mail.smtp.auth}</prop>
            </props>
        </property>
    </bean>
    
    <!-- velocity 配置相關屬性如VM加載路徑-->
    <bean class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
        <property name="velocityProperties">
            <map>
                <entry key="resource.loader" value="class"/>
                <entry key="class.resource.loader.class" value="org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"/>
            </map>
        </property>
    </bean>
郵件發送、模版解析
/**組織郵件發送的元素*/
    private MimeMessage createMailMessage(Map<String, Object> model) throws MessagingException {
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setFrom(bundle.getString("mail.from")); // 發件人
        helper.setTo(bundle.getString("mail.to")); // 收件人
        helper.setCc(bundle.getString("mail.cc").split(",")); // 抄送
        helper.setSubject("xxx統計"); // 主題
        helper.setText(resolveVelocityTemplate(model), true); // 無附件模式,內容
        return message;
    }

    /**解析Velocity模版*/
    public String resolveVelocityTemplate(Map<String, Object> model) {
        String content = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "template/mail.vm", "UTF-8", model);
        return StringUtils.isBlank(content) ? "" : content;
    }




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章