在“运行syslog-ng”中我们简单介绍了一个基本配置文件的大概结构,保证syslog-ng能正常运行起来。这边将详细介绍下syslog-ng的日志配置及如何进行高效的配置,先介绍下syslog的一些基本知识:

日志级别及日志设备

syslog-ng和syslog一样,日志级别都有以下8种:

级别越低代表越重要的日志。

设备号有以下几种:

由设备号和日志级别我们可以计算出log的级别(facility_num * 8 + level_num)

使用syslog函数打印日志到syslog

了解了日志级别及日志设备后,我们就可以使用syslog函数来往设备(/dev/log)发送日志了(syslog-ng的system()设备其实就是获取送往/dev/log设备的日志,传统的syslog也会监控该设备)。函数用法可以使用man 3 syslog查看:

NAMEcloselog, openlog, syslog, vsyslog - send messages to the system loggerSYNOPSIS#include <syslog.h>void openlog(const char *ident, int option, int facility);void syslog(int priority, const char *format, ...);void closelog(void);

使用例子如下:

openlog("redis_server", LOG_PID, 1);  //设置设备号为1,ident(标识为redis_server),option为LOG_PID
syslog(LOG_DEBUG, "%s", “redis_server is started!”); //打印debug日志信息
loselog(); //使用完后关闭

了解完上面知识后,我们来看看如何对syslog-ng进行日志配置:

配置syslog-ng

基本语法

syslog-ng的配置文件为syslog-ng.conf,syslog-ng 运行时会解析该配置文件,然后对日志来源进行监听(看描述符是否可读),再对收集来的日志做一些指定的处理(如过滤,替换,格式化等)后,将日志写往各个destination:
log{
source(s_xxx);
filter(f_xxx);
destination(d_xxx)
};

其中source支持的设备主要有:file,network, tcp, udp, pipe, unix-dgram等
具体参见说明文档:Chapter 6. Collecting log messages — sources and source drivers

destination支持的有:file, network, syslog, redis, sql, hdfs, mongodb
具体参见说明文档:Chapter 7. Sending and storing log messages — destinations and destination drivers
(随着大数据和分布式时代的到来,syslog-ng也增加了对redis,hdfs等的支持,更新很快的,这也是开源的优势)

syslog-ng支持将收集的日志进行不同的处理,然后写入不同的目的地,这时候语法如下:
log{
source(s1);
source(s2);
{filter(f1); destination(d1);}
{filter(f2); destination(d2);}
};

格式化输出

格式化输出就是对捕获的日志进行排版,以一种方便阅读和使用的格式存储日志(如方便使用awk等进行日志诊断)。在日志格式化时,就不能不提syslog协议,其格式如下:

HEADER SYSLOGPRO_VERSION ISOTIMESTAMP HOSTNAME APPLICATION PROC_ID MESSAGEID STRUCTURED-DATA BOM(\xEF\BB\xBF) MSG

其中HEADER为信息头,通常包含信息长度(HEADER以后内容的长度)及日志优先级PRI(logFacility * 8 + logLevel), 具体说明请参考RFC5424The Syslog Protocol
举例:

<34>1 2003-10-11T22:14:15.003Z mymachine.example.com su - ID47 - BOM'su root' failed for lonvick on /dev/pts/8

对应的格式如下(这边没有proc_id,也没有structured data,两者都用’-‘替代了, BOM指出使用的是UTF-8编码):

<PRI>SYSLOGPRO_VERSION ISOTIMESTAMP HOSTNAME APPLICATION PROC_ID MESSAGEID STRUCTURED-DATA BOM MSG

在syslog-ng中,支持自定义日志格式,这时候我们可以使用template语法:

template global_format{template("<${PRI}> ${ISODATE} ${HOST} ${PROGRAM} ${PID} ${MESSAGE}\n");
};
options { proto-template(global_format); };  #用于protocol-like destination, like syslog() and network()
options { file-template(global_format); }; #用于file-like destination

其中也可以使用${MSGHDR}来替代$PROGRAM[${PID}]的使用;新的syslog-ng版本也支持单独在template destination中指定template,则该template只会在该destination中生效(需要较新的syslog-ng版本才支持,比如3.4.2版本就不支持这种语法)。如:

destination d_file {file ("/var/log/messages"template("${ISODATE} ${HOST} ${MESSAGE}\n") );  #或template(template_name)
};

下面我们在syslog-ng.conf中实际操作以下,增加上面的template语法,然后启动syslog-ng,输出的日志变为:

<45> 2017-09-16T09:16:35+08:00 localhost syslog-ng 86650 syslog-ng starting up; version='3.4.2'

变量

syslog-ng中的marco变量十分丰富(如HOST, LEVEL_NUM等等)。此外,其还支持变量展开,作用类似shell脚本的$var功能: var=hello; echo $var ,下面来看看如何自定义和使用变量.

  1. 定义语法
    使用@define语句定义一个变量(或者叫宏),如下:

    @define local_loglevel 5
    @define local_file “/va/log/messages”

  2. 使用语法
    使用``符号进行变量展开,如:

    filter f_level{“${LEVEL_NUM}” <= “`local_loglevel`“;}

  3. 文件包含
    可以使用@include ‘filename’,将某个配置文件包含进syslog-ng.conf,这种语法在需要对配置文件拆分的场合很有用,如有个配置文件中的参数会变化(被外部修改),这时可以单独把这些参数放到另外的文件中,方便修改,也减少了破坏syslog-ng.conf文件的可能

filter

日志处理中最常用的filter当属级别过滤。此外,filter还具有很强大的关键字过滤功能,支持多个filter同时使用,具体语法参考Chapter 8. Routing messages: log paths and filters。

TLS传输

详见Chapter 10. TLS-encrypted message transfer
关于证书生成和配置的操作可参考证书相关概念及使用openssl生成自认证证书

其它

  • 关键字替换
rewrite r_rewrite_set{set("myhost", value("HOST")};
condition(program("myapplication")));};
log {   source(s1);  rewrite(r_rewrite_set);  destination(d1);
};
  • flow control
    tcp: max-connections(300)
    指定发送往网络目的地的日志缓冲区大小: log-fifo-size(40000)
    在destination中启用flow control: flags(flow-control)

结语

syslog-ng支持的配置语法众多,具体可根据使用时查阅手册进行配置,本文讲解的是一些比较常用的操作,如有错误,欢迎指出。
后续会讲解下syslog-ng的源码,作为一个优秀的日志服务器和客户端,深入理解下应该还是能有不少收获的

syslog-ng详解——syslog-ng配置语法相关推荐

  1. vue.js2.0 java_详解vite2.0配置学习(typescript版本)

    介绍 尤于溪的原话. vite与 Vue CLI 类似,vite 也是一个提供基本项目脚手架和开发服务器的构建工具. vite基于浏览器原生ES imports的开发服务器.跳过打包这个概念,服务端按 ...

  2. iSCSI(一) iSCSI详解 及 iSCSI配置

    iSCSI(一) iSCSI详解 及 iSCSI配置 在集群系统中存储是很重要的一部分,而且存储相关的内容:从硬件设备.接口到文件系统.传输网络.数据协议等,涉及的知识非常多,这里不发散,重点认识iS ...

  3. Git客户端图文详解如何安装配置GitHub操作流程攻略

    Git客户端图文详解如何安装配置GitHub操作流程攻略 软件应用 爱分享  3个月前 (08-15)  8896浏览  0评论 Git介绍 分布式 : Git版本控制系统是一个分布式的系统, 是用来 ...

  4. ActiveMQ配置详解之如何配置自动重新连接

    2019独角兽企业重金招聘Python工程师标准>>> ActiveMQ配置详解之如何配置自动重新连接 博客分类: MQ 这从这一篇开始,将讲解在activeMQ中的相关配置.由于a ...

  5. K8SPod详解之pod配置

    K8SPod详解之pod配置 Pod定义 Pod配置 pod.spec.containers 基本配置 镜像拉取 启动命令 环境变量 端口设置 资源配额 每个pod中都可以包含一个或者多个容器,这些容 ...

  6. 单臂路由的详解及简单配置

    单臂路由的详解及简单配置 前言 1.什么是单臂路由 2.什么是逻辑子接口 3.单臂路由的配置 4.单臂路由的优缺点 1.什么是单臂路由 单臂路由(router-on-a-stick)是指在路由器的一个 ...

  7. android studio gradle3.3,Android studio 3.2 升级详解及Gradle配置

    Android studio 3.2 升级详解及Gradle配置 发布时间:2018-09-29 15:36, 浏览次数:618 , 标签: Android studio Gradle 一直在使用An ...

  8. 详解 JavaScript 的 IIFE 语法

    详解 JavaScript 的 IIFE 语法 IIFE 语法 IIFE 语法的一些变体 小括号去哪儿了? 命名的 IIFE 防止连接文件时出现问题 使用箭头函数代替函数表达式 一些不推荐的立即调用函 ...

  9. vue文件目录结构详解(一)---基础配置

    参考文献: vue-cli入门(二)--项目结构 | 思否-Reachel Vue-cli创建vue项目以及配置文件梳理|思否-AshleyLv Vue系列之WebPack与Eslint | 充电实践 ...

  10. Spring配置详解,Spring配置元信息详解,Spring配置大全及源码分析

    文章目录 一.Spring都可以配置哪些元信息 二.Spring Bean 配置元信息 1.GenericBeanDefinition 2.RootBeanDefinition 3.Annotated ...

最新文章

  1. 基于Atmega8单片机的串口收发程序
  2. 华人计算机大牛刘炯朗教授仙逝,他是姚期智院士的博士导师,还著有离散数学教科书...
  3. Nacos深入浅出(三)
  4. ADOMD.net概述
  5. calc(~,mac电脑set-cookies要域名和请求域名相同
  6. SQL高级---SQL ALTER TABLE 语句
  7. 火狐Fire fox换电脑后登录同步服务输入正确密码但一直提示密码错误
  8. Error:java.lang.RuntimeException: Some file crunching failed, see logs for details
  9. i9x系列是服务器CPU吗,Intel推出全新酷睿X系列CPU:i9处理器亮相
  10. C# QQ连连看外挂(内存版)源代码
  11. 魅蓝note6救砖_魅族魅蓝note6线刷刷机教程_魅蓝note6 rom包_救砖刷机包下载
  12. Mysql报错 Error querying database. Cause java.sql.SQLSyntaxErrorException
  13. Azkaban重新编译,解决:Could not connect to SMTP host: smtp.163.com, port: 465【2022年01月10日】
  14. 寒假总结和新学期计划
  15. 办公室计算机oa,办公自动化oa是计算机
  16. typings ~报错
  17. Tiny210裸机开发初体验
  18. 武交武铁武城计算机类专业哪个学校好,重磅!我校入选国家教育部重要名单!快来支持武交院!...
  19. 利用python程序、虚拟串口软件、串口通信助手,实现串口通信(两串口互相收发文字)
  20. Unity中常用的快捷键

热门文章

  1. 2021年淘宝客系列教程(二)事前准备
  2. extjs4 冻结列_ExtJs4之Grid详细
  3. hive udf kyroexception unable to find class
  4. S_ALR_87013611报表 列标题为英文处理
  5. 365资讯简报 每日精选15条新闻简报 每天一分钟知晓天下事12月6日
  6. 使用Pyecharts进行全国水质TDS地图可视化全过程5:利用Excel地图实现美国水质地图可视化
  7. 用sympy写出欧拉方程
  8. 网络广告 之 淘宝“蓝鲸计划”和“淘宝联盟”(1)
  9. ERROR 1366 (HY000): Incorrect string value: ‘\xAE\xE8\xB4\xA4\xE4\xB8…
  10. 恭贺MarsNFT数字藏品平台与中国书画艺术家刘斓斐合作