haproxy的配置

日志投送:

global
log 127.0.0.1 local1 info

默认端口是udp514

默认日志:

defaults
log global
log-format \"date_time\":\"%t\",\"log_type\":\"tcp\",\"frontend_name\":\"%f\",\"hostname\":\"%H\",\"clientip\":\"%ci\",\"backend_name\":\"%b\",\"server_name\":\"%s\",\"server_ip\":\"%si\"

这部分的日志字段不包含http的信息防止tcp mode报错

http日志配置:

haproxy的日志跟nginx日志有所同,有的header信息并不能直接配到日志里面

haproxy提供了一个capture方法可以捕捉一些信息,可以用capture捕获的信息作为log-format的字段

#声明一个槽并捕获数据

frontend public
capture request header Host len
capture request header User-Agent len
capture request header X-Forwarded-For len
log-format \"date_time\":\"%t\",\"log_type\":\"http\",\"frontend_name\":\"%f\",\"hostname\":\"%H\",\"clientip\":\"%ci\",\"backend_name\":\"%b\",\"server_name\":\"%s\",\"server_ip\":\"%si\",\"http_version\":\"%HV\",\"http_mode\":\"%HM\",\"url\":\"%HP\",\"http_code\":\"%ST\",\"request_time\":\"%TR/%Tw/%Tc/%Tr/%Ta\",\"http_host\":\"%[capture.req.hdr(0)]\",\"agent\":\"%[capture.req.hdr(1)]\",\"forwarded_for\":\"%[capture.req.hdr(2)],%Tr,%Tq\"

注意capture request header 只能配置在frontend部分

参考文档:

https://www.haproxy.com/documentation/hapee/1-8r1/traffic-management/log-format-rules/

https://www.haproxy.com/documentation/hapee/1-8r1/traffic-management/traffic-capture/

rsyslog的配置

准备环境:

docke pull rsyslog/syslog_appliance_alpine  #下载官方的docker镜像版本是8.x版本
wget https://github.com/rsyslog/rsyslog-docker/blob/master/appliance/alpine/rsyslog.conf #下载配置文件
vim Dockerfile #把配置文件放到原始镜像里面
FROM rsyslog/syslog_appliance_alpine
COPY ./rsyslog.conf /etc/rsyslog.conf

启动容器

vim build.sh
registry_tag="haproxy-rsyslog"
name="haproxy-rsyslog"
docker build -t=$registry_tag .
docker stop $name
docker rm $name
docker run --restart=always -d --privileged=true -u root --name $name -p :/udp -v /var/log:/var/log $registry_tag ./build.sh

每次修改rsyslog.conf只需要执行一下./build.sh 就行了

日志配置:

修改刚才下载的rsyslog.conf

使用自定义模板

template(name="FileFormat" type="string"
string= "{\"log_source\":\"%syslogtag%\",%msg%}\n"
)

haproxy日志已经包含了 %TIMESTAMP% %HOSTNAME% 所以把这两个字段去掉了

配置日志接收

local1.*  action(type="omfile" file="/var/log/haproxy/haproxy_all.log" template="FileFormat")

日志关键字过滤:

方法1 基本过滤

:msg, contains, "debug"  #只保留包含有debug的日志,使用!contains就是丢弃包含有debug的日志
local1.* action(type="omfile" file="/var/log/haproxy/haproxy.log" template="FileFormat")

方法2 扩展过滤

if $syslogfacility-text == 'local1' and not ($msg contains 'debug') then action(type="omfile" file="/var/log/haproxy/haproxy.log" template="FileFormat") #丢弃包含有debug的日志
local1.*  action(type="omfile" file="/var/log/haproxy/haproxy.log" template="FileFormat")
if $msg contains 'debug' then /var/log/haproxy/haproxy_debug.log #把包含debug的日志单独保留

参考文档:

https://www.rsyslog.com/doc/v8-stable/configuration/filters.html

haproxy json 自定义格式日志 并用rsyslog 收集的更多相关文章

  1. 最权威的json自定义格式

    1.封装result,作为返回的对象 public class Result<T> {        private int code;    private String msg;    ...

  2. Nginx 高级配置-自定义json格式日志

    Nginx 高级配置-自定义json格式日志 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在大数据运维工作中,我们经常会使用flume,filebeat相关日志收集工具取收集日志 ...

  3. ELK之收集Nginx、Tomcat的json格式日志

    1.安装Nginx yum -y install nginx vim /etc/nginx/nginx.conf # 修改日志格式为json格式,并创建一个nginxweb的网站目录 log_form ...

  4. filebeat收集nginx的json格式日志

    一.在nginx主机上安装filebeat组件 [root@zabbix_server nginx]# cd /usr/local/src/ [root@zabbix_server src]# wge ...

  5. rsyslog收集nginx日志配置

    rsyslog日志收集配置 rsyslog服务器收集各服务器的日志,并汇总,再由logstash处理 请查看上一篇文章  http://bbotte.blog.51cto.com/6205307/16 ...

  6. 【Spring Boot】Spring Boot之利用Logstash将日志转换成以JSON的格式存储和输出

    一.Logstash的作用 Logstash是一个完全开源的工具,它可以对日志进行收集.过滤,能非常方便地将日志转换成以JSON的格式存储和输出,并将其存储供以后使用. 二.整合Logstash的步骤 ...

  7. 集中日志服务器Rsyslog

    http://www.gaizaoren.org/archives/408 基于主机的管理一般需要收集服务器的日志信息用于及时发现错误,处理故障. 搭建linux下的集中日志服务器的程序一般可以用sy ...

  8. 日志管理-rsyslog日志服务器及loganalyzer

    一,日志基础 日志:记录时间,地点,任务,事件 格式:日期时间 主机 进程[pid]: 事件内容 rsyslog 特性: 多线程,UDP, TCP, SSL, TLS, RELP,MySQL, PGS ...

  9. 从0搭建一个基于 ELK 的日志、指标收集与监控系统

    为了使得私有化部署的系统能更健壮,同时不增加额外的部署运维工作量,本文提出了一种基于 ELK 的开箱即用的日志和指标收集方案. 在当前的项目中,我们已经使用了 Elasticsearch 作为业务的数 ...

随机推荐

  1. 安装APK时引发INSTALL_PARSE_FAILED_MANIFEST_MALFORMED错误的几种可能(申明:来源于网络)

    安装APK时引发INSTALL_PARSE_FAILED_MANIFEST_MALFORMED错误的几种可能(申明:来源于网络) 地址:https://my.oschina.net/freestyle ...

  2. 201621123049 《Java程序设计》第1周学习总结

    一. 本周学习总结 JDK,JRE,JVM等基本概念 怎么学好java???不,是怎么才能应用好??? 编程!编程!编程! 思考->设计->解决问题 二. 书面作业 1.虚拟机 1.1 执 ...

  3. 如何将MP3录音转文字

    相信很多人都有电话录音的习惯,因为这样可以记录下很多重要的信息.那么当我们通过录音将一些重要的信息记录下来后,我们应该怎样将这些录音文件转换成文字进行记录呢?下面我们就一起来看一下吧. 操作步骤: 步 ...

  4. [No0000154]详解为什么32位系统只能用4G内存.

    既然是详解, 就从最基础的讲起了. 或者1来存储数据的, 所以Bit实际上可以看成存放1个二进制数字的1个位置.也就是说bit只有2种值, 0 或者 1, 所以1个bit能存放1个布尔类型的值(boo ...

  5. xss 学习记录

    反射型和持久型 一些简单的xss例子: <script>alert(/xss/)</script> 嵌入到textarea的,需要先关闭textarea标签 </text ...

  6. 分布式锁 AP需求 CP需求

    小结: 1. 2019给Java程序员的唯一1条建议 https://mp.weixin.qq.com/s/dpx4GsGgZ0xtvzKd5riJng

  7. 线上bug处理

    http:response X-Frame-Options是什么? x-frame-options是一个HTTP响应头,用来告诉浏览器这个网页是否可以放在iframe内. x-frame-option ...

  8. [ovs][libvirt][virtio][qemu] vhost user client 排障

    ovs-dpdk + qemu 使用vhostuserclient通信,连路不通,libvirt报错如下: -- ::: starting up libvirt version: , package: ...

  9. 使用UMDH查找内存泄露

    参考文献: 1.http://blog.csdn.net/wcjy07220114/article/details/6962140 2.http://blog.csdn.net/chenyujing1 ...

  10. kubernetes的Kubelet

    1. kubelet简介 在kubernetes集群中,每个Node节点都会启动kubelet进程,用来处理Master节点下发到本节点的任务,管理Pod和其中的容器.kubelet会在API Ser ...