Skip to content

软件介绍

nxlog 是用 C 语言写的一个开源日志收集处理软件,它是一个模块化、多线程、高性能的日志管理解决方案,支持多平台。可以处理来自许多不同来源的大量事件日志。支持的日志处理类型包括重写,关联,警报,过滤和模式匹配。其他功能包括计划,日志文件轮换,缓冲和优先处理。处理完成后,NXLog可以以任何支持的格式存储或转发事件日志。输入,输出和处理采用模块化架构和强大的配置语言实现。

Nxlog 的 module 共分为4种,分别为:
Input module 负责从各种数据源(如 file, archive, tcp, udp等)中采集数据,
Output module 定义了该如何处理采集的数据,我们可以以文件的方式保存下来,也可能通过 tcp,udp 发出去。
Processor module 负责对采集的数据进行处理,比如做一些内容过滤,格式转换之类的。
Extension module 主要是用来扩展读写数据的接口,它可以针对特定的数据类型进行特定的处理.这里面 input 和 output 模块是必不可少的,processor 和 extension 模块的话可添加与不加

特性

- 跨平台:window&Linux 
- 模块化架构:日志格式化、传输协议、数据库出来、NXLog语言扩展都是模块。只有当模块是需要使用的时候,才会被加载,这能够让程序使用更少的内存。NXLog的核心只具备出来文件和Socket的能力,其他的功能都被放到了各个模块里面,模块具备统一的API,开发者可以轻易的编写新的模块去扩展NXLog。NXLog可以作为客户端,也可以作为服务器端。
- 可扩展的多线程架构:NXLog使用基于事件的架构,NXLog在处理日志消息的时候还会采用并行的模式,读取消息、输出消息等日志消息处理操作都是并行处理的。例如:当单线程的syslog进程在尝试输出日志消息到数据库的时候,它会发生堵塞,后面的UDP输入将会丢丢弃,而多线程架构的NXLog不仅避免了这个问题还充分的发挥了操作系统的并行处理能力
- 高吞吐量:常规的POSIX系统为监控文件描述提供了select或poll的系统调用,但是这些方式都是不可扩展的。现代操作系统具备一些I/O就绪通知的API用于处理大量的文件打开以及网络连接并发的情况。NXLog就是使用这些高性能的API对日志消息进行处理的。
- 消息缓冲:当日志消息由于网络问题导致输入堵塞的时候,NXlog会主动调整输入的流量。这能够避免日志消息丢失的情况。同时,NXLog还提供了一些消息缓存的模块可以让日志消息暂存到磁盘或内存中。当问题解决之后,缓冲会全部刷出,并被清空。 
- 优先级:支持为日志路由设定优先级。 
- 内置的配置语言:内置的nxlog语言和perl语法非常类似。 
- 任务管理器:NXLog内置了一个类似Cron的作业调度器,并且提供了更多的功能,使用这种特性,管理员能够自动的执行一些例如日志轮转,系统检查等的任务。 
- 日志轮转:当日志达到了一定的大小,或者到了某个具体的时间,是需要被日志轮转工具进行轮转的,file input reader模块支持扩展的日志轮转脚本,它能够对日志文件进行转移/重命名等动作,类似的,file output writer 模块能够监控文件的轮转,并在轮转完后重新打开输出。 
- 离线消息处理模式:有些时候日志需要离线处理,NXLog提供了这种模式。 
- 字符集和i18n支持:日志消息可能是各种各样的字符集写出来的,例如UTF-8、latin-2等,Nxlog具备字符集的转换能力。

Nxlog启动流程

安装

Linux安装

wget https://nxlog.co/system/files/products/files/348/nxlog-ce-2.11.2190-1_rhel7.x86_64.rpm #官网下载对应的版本
yum install -y libdbi #安装依赖
rpm -ivh nxlog-ce-2.11.2190-1_rhel7.x86_64.rpm
rpm -ql nxlog-ce-2.11.2190-1_rhel7.x86_64 #查看相关文件的位置
vi /etc/nxlog.conf #编辑配置文件
/etc/init.d/nxlog restart #重启软件

Windows安装

nxlog下载
编辑配置文件使用记事本等软件打开nxlog.conf配置文件,根据操作系统位数确保nxlog的路径,不正确的路径使用#号注释掉,确保不生效。
启动nxlog进程打开windows服务管理器,找到nxlog进程选择启动。

配置文件修改

对接syslog或者BDS等: <Output out> Module om_tcp/om_udp host port 514
对接logtash: <Output out> elasticsearch 接入日志类型: <Input in1> Module im_file File '/application/nginx/logs/*.log'或者"C:\\intetpub\\logs\\LogFiles\\W3SVC1\\u_ex*"或者Module im_msvistalog 配置示例:

## This is a sample configuration file. See the nxlog reference manual about the
## configuration options. It should be installed locally under
## /usr/share/doc/nxlog-ce/ and is also available online at
## http://nxlog.org/docs

########################################
# Global directives                    #
########################################
User nxlog
Group nxlog

LogFile /var/log/nxlog/nxlog.log
LogLevel INFO

########################################
# Modules                              #
########################################
<Extension _syslog>
    Module      xm_syslog
</Extension>

<Input in1>
    Module       im_file
    File        '/application/nginx/logs/*.log'
    SavePos     True
</Input>

<Output fileout1>
    Module    om_file
    File    "/var/log/logmsg.txt"
    Exec    if $Message =~ /error/ $SeverityValue = syslog_severity_value("error");
    Exec    to_syslog_bsd();
</Output>

<Output out>
    Module      om_tcp
    Host        10.0.0.223
    Port        514
</Output>

########################################
# Routes                               #
########################################
<Route tcproute>
    Path    in1 => out
</Route>

参考资料

Nxlog_docs
Nxlog配置帮助
Logstash 最佳实践
深入浅出 NXLog (一)
深入浅出 NXLog (二)