haproxy json 自定义格式日志 并用rsyslog 收集
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 收集的更多相关文章
- 最权威的json自定义格式
1.封装result,作为返回的对象 public class Result<T> { private int code; private String msg; ...
- Nginx 高级配置-自定义json格式日志
Nginx 高级配置-自定义json格式日志 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在大数据运维工作中,我们经常会使用flume,filebeat相关日志收集工具取收集日志 ...
- ELK之收集Nginx、Tomcat的json格式日志
1.安装Nginx yum -y install nginx vim /etc/nginx/nginx.conf # 修改日志格式为json格式,并创建一个nginxweb的网站目录 log_form ...
- filebeat收集nginx的json格式日志
一.在nginx主机上安装filebeat组件 [root@zabbix_server nginx]# cd /usr/local/src/ [root@zabbix_server src]# wge ...
- rsyslog收集nginx日志配置
rsyslog日志收集配置 rsyslog服务器收集各服务器的日志,并汇总,再由logstash处理 请查看上一篇文章 http://bbotte.blog.51cto.com/6205307/16 ...
- 【Spring Boot】Spring Boot之利用Logstash将日志转换成以JSON的格式存储和输出
一.Logstash的作用 Logstash是一个完全开源的工具,它可以对日志进行收集.过滤,能非常方便地将日志转换成以JSON的格式存储和输出,并将其存储供以后使用. 二.整合Logstash的步骤 ...
- 集中日志服务器Rsyslog
http://www.gaizaoren.org/archives/408 基于主机的管理一般需要收集服务器的日志信息用于及时发现错误,处理故障. 搭建linux下的集中日志服务器的程序一般可以用sy ...
- 日志管理-rsyslog日志服务器及loganalyzer
一,日志基础 日志:记录时间,地点,任务,事件 格式:日期时间 主机 进程[pid]: 事件内容 rsyslog 特性: 多线程,UDP, TCP, SSL, TLS, RELP,MySQL, PGS ...
- 从0搭建一个基于 ELK 的日志、指标收集与监控系统
为了使得私有化部署的系统能更健壮,同时不增加额外的部署运维工作量,本文提出了一种基于 ELK 的开箱即用的日志和指标收集方案. 在当前的项目中,我们已经使用了 Elasticsearch 作为业务的数 ...
随机推荐
- 凭据管理 API
api 有相应更新 https://www.chromestatus.com/features/4781762488041472 <!DOCTYPE html> <html> ...
- ABP之展现层(导航菜单)
基本的增删改查已经粗糙的结束了,接下来就是要方便的展示了,也就是导航菜单.在Abp中已经对导航栏的设置进行了相应的封装(Abp.Application.Navigation),可以方便我们快速的将自己 ...
- 让jQuery的contains方法不区分大小写
// NEW selector jQuery.expr[':'].Contains = function(a, i, m) { return jQuery(a).text().toUpperCase( ...
- Glufster挂载失败Mount failed. Please check the log file for more details解决办法
设置两台glusterfs服务器主机名分别为gfs1,gfs2 设置好glusterfs挂载不成功提示如下 Mount failed. Please check the log file for mo ...
- css学习_css写的位置
!!!拿到一个页面后应该先写结构再写样式 结构由大到小,由外到里 样式最好按顺序加 position .float . 颜色 背景 字体 等... 1.行内(内联)样式 2.内部样式表(按道理可 ...
- Runloop的再学习之浅析(一)
一,认识RunLoop 我的理解: 1. 在编程的世界里,万物皆对象.所以RunLoop 实际上也是一个对象,这个对象管理了其需要 处理的事件和消息,并提供了一个入口函数来执行上面 Event Loo ...
- U3d 入门
环境搭建: 1.安装exe; 2.破解 ,百度
- NOIP 2018 day1 题解
今年noip的题和去年绝对是比较坑的题了,但是打好的话就算是普通水准也能350分以上吧. t1: 很显然这是一个简单的dp即可. #include<iostream> #include&l ...
- ORACLE managed file(OMF)
ORACLE managed file (OMF) Oracle自动创建和删除OMF文件 不用操心文件的命名约定 在手动管理文件时容易错误删除数据文件(OMF降低这种风险) Oracle自动删除不再需 ...
- Python开发【笔记】:PEP 8 编码规范
PEP 8 编码规范 https://bk.tencent.com/document/bkrule/040101.pdf ...