分布式日志收集并统计分析

现在互联网公司系统基本都是分布式部署,应用日志分布在不同的机器上,不不便于分析和统计,使用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;
    }




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