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

    xiaoxiao2021-03-25  62

    现在互联网公司系统基本都是分布式部署,应用日志分布在不同的机器上,不不便于分析和统计,使用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 以守护进程的方式启动rsync2、客户端配置

    客户端使用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; }

    转载请注明原文地址: https://ju.6miu.com/read-39208.html

    最新回复(0)