ELK-日志收集工具nxlog

ELK-日志收集工具nxlog

文章目录

    • ELK-日志收集工具nxlog
  • 前言
  • 安装
  • 语法
    • 宏变量
    • 通用模块指令格式
      • Module 模块名
      • FlowControl
      • InputType:指定输入类型
      • OutputType:指定输出类型
      • Exec: 执行命令
      • Schedule:定时器
        • Every
        • First
        • Exec
        • When
    • Route模块
    • Extension模块
      • Input
      • output
        • on_tcp/om_udp
        • on_file
        • on_ssl
    • 修改输出内容
  • 例子
    • 读取/var/log/message传给logstash
    • 读取windows事件发送给logstash

前言

nxlog配置有6个可配置的部分,Extension,Processor,Input,Output,Route。其中Route是路由,不需要指定模块,其它都有各自的模块可指定。
官方文档地址-英文
一些内置函数,左侧的3.6章节

安装

官网下载地址,下载nxlog-ce-2.10.2150.msi,点击安装。
64位默认安装路径:C:\Program Files (x86)\nxlog,
32位默认安装路径:C:\Program Files\nxlog,
日志文件默认路径:C:\Program Files (x86)\nxlog\data\nxlog.log。
配置文件路径:C:\Program Files (x86)\nxlog\conf\nxlog.conf。

语法

默认配置文件:

Panic Soft
#NoFreeOnExit TRUE

define ROOT     C:\Program Files (x86)\nxlog
define CERTDIR  %ROOT%\cert
define CONFDIR  %ROOT%\conf
define LOGDIR   %ROOT%\data
define LOGFILE  %LOGDIR%\nxlog.log
LogFile %LOGFILE%

Moduledir %ROOT%\modules
CacheDir  %ROOT%\data
Pidfile   %ROOT%\data\nxlog.pid
SpoolDir  %ROOT%\data


    Module      xm_syslog


    Module      xm_charconv
    AutodetectCharsets iso8859-2, utf-8, utf-16, utf-32



    Module      xm_exec



    Module      xm_fileop

    # Check the size of our log file hourly, rotate if larger than 5MB
    
        Every   1 hour
        Exec    if (file_exists('%LOGFILE%') and \
                   (file_size('%LOGFILE%') >= 5M)) \
                    file_cycle('%LOGFILE%', 8);
    

    # Rotate our log file every week on Sunday at midnight
    
        When    @weekly
        Exec    if file_exists('%LOGFILE%') file_cycle('%LOGFILE%', 8);
    


宏变量

宏可以理解为定义一个变量并赋值。比如

define ROOT     C:\Program Files (x86)\nxlog

define指令可以定义宏变量,使用时用两个%号包裹,比如%ROOT %
例子

define BASEDIR /var/log

    Module  im_file
    File    '%BASEDIR%/messages'

配置文件默认定义了很多宏,了解即可。

通用模块指令格式

Module 模块名

模块名在C:\Program Files (x86)\nxlog\modules下以.dll后缀结尾(linux以.so格式结尾),前缀分别是im_, pm_, om_, or xm_。

im:input module缩写,pm:processor module,om:output module,xm:extension module

FlowControl

是否启用流程控制,建议在使用im_uds模块从/dev/log采集本地syslog 的时候禁用掉,不然syslog会阻塞所有写入的动作,假如输出队列还满掉了,系统可能就不响应了

InputType:指定输入类型

只对im_exec, im_ssl, im_tcp, im_udp, and im_uds模块有效,一般不会特意设置
有效值如下
1. LineBased:一行为一个日志,用\n或者\r\n区分

  2. Dgram:一旦Buffer用完了,考虑合成一份日志,im_udp模块的时候是默认选项,因为UDP syslog 是分批到达的

  3. Binary:转成Nxlog二进制格式

例如


    Module    im_tcp
    Port        2345
    InputType   Binary

OutputType:指定输出类型

只能用于 om_file, om_exec, om_ssl, om_tcp, om_udp, and om_uds模块
有效值如下:
1. LineBased:一行为一个日志
2. Dgram:一旦缓冲满了就把缓冲数据作为一行日志,om_udp输出默认是开着的
3. Binary:用nxlog binary格式化输出

Exec: 执行命令

每接收到一条日志信息都会执行一次。在input, processor, and output模块里完全支持,大部分extension模块都不支持(除了 xm_multiline 和 xm_rewrite模块)。每行是一条Exec指令,多行指令使用换行,使用分号结尾,放在模块的最后面。

比如单行指令:

Exec    $Hostname = 'myhost';

在每行记录里定义了一个变量$Hostname
比如多行指令:

Exec    log_info("first"); \
        log_info("second");

多行指令也可抱成块形势,上面和下面语句意思一样


    log_info("first");
    log_info("second");

Schedule:定时器

Every

比如Every 1 sec表示每秒执行。一个整型数字加上单位组成值,缺省单位是秒,有sec, min, hour, day, or week单位可选

First

设置首次执行时间,使用datetime类型的值,比如First 2010-12-17 00:19:06

Exec

执行的指令

When

@yearly        Run once a year, "0 0 1 1 *".
@annually      (same as @yearly)
@monthly       Run once a month, "0 0 1 * *".
@weekly        Run once a week, "0 0 * * 0".
@daily         Run once a day, "0 0 * * *".
@midnight      (same as @daily)
@hourly        Run once an hour, "0 * * * *".

这些都是语法,例子


    Module  im_tcp
    Port    2345

    
        Every   1 sec
        First   2010-12-17 00:19:06
        Exec    log_info("scheduled execution at " + now());
    

    
        When    1 */2 2-4 * *
        Exec    log_info("scheduled execution at " + now());
    

Route模块

这个是最简单模块。指定路由方式。
语法



    Path       IN_NAME => PRO_NAME => OUT_NAME



比如


	Module im_file
	File "D:\\jar\\dongli\\logs\\spring-boot.log"
	SavePos TRUE
	Exec convert_fields("auto", "utf-8"); 



	Module om_file
	File 'D:\666.log'




	Path in_file => out_file

Extension模块

一些前期引入的操作
这个模块一般我们不用动它,默认配置了几个


    Module      xm_syslog #收集事件日志,所有的事件日志默认都被收集

将 xm_syslog换成xm_json表示系统日志格式为json。



    Module      xm_charconv



解决文件内容中解析失败问题

Input

参考
数据输入,可选模块如下图:
ELK-日志收集工具nxlog_第1张图片
常用的是im_msvistalog和im_file


	#im_msvistalog支持的是2003之后的版本
    Module      im_msvistalog
	#im_mseventlog支持的是2003之前版本
	# Module      im_mseventlog





    Module      im_msvistalog


具体例子
im_file模块:获取springboot.log日志
注意文件使用\


	Module im_file
	File "D:\\jar\\dongli\\logs\\spring-boot.log"
	SavePos TRUE
	Exec convert_fields("auto", "utf-8"); 
	Exec $name="chenyuan";

比如文件存在多个,使用,如:File "D:\jar\dongli\logs\.log"
支持的配置:

  1. SavePos:保存上次读取位置,默认true
  2. Recursive:是否递归子目录文件,例如目录设置为/var/log/*.log,那么/var/log/apache2/access.log也会被匹配,默认是true
  3. ReadFromLast:从最新文件去读,默认true,和SavePos配合使用,一般不设置。具体可参考英文描述
This optional boolean directive instructs the module to only read logs which arrived after NXLog was started if the saved position could not be read (for example on first start). When SavePos is TRUE and a previously saved position value could be read, the module will resume reading from this saved position. If ReadFromLast is FALSE, the module will read all logs from the file. This can result in quite a lot of messages, and is usually not the expected behavior. If this directive is not specified, it defaults to TRUE.
  1. PollInterval:多久检查文件变化,默认是1秒(1 second),如果设置为2秒,就是2 second
  2. DirCheckInterval:检查目录下文件变化,比如增加新文件,如果PollInterval设置了就以PollInterval时间为准,默认是2秒(2 seconds)
    im_exec执行命令:使用tail命令读取文件
  3. CloseWhenIdle:空闲时是否关闭输入流,默认是FALSE

    Module  im_exec
    Command /usr/bin/tail
    Arg     -f
    Arg     /var/log/messages

output

数据输入,可选模块如下图:
ELK-日志收集工具nxlog_第2张图片

模块指定发送方式
om_tcp/om_udp:以tcp、udp方式发送
om_http:http方式发送
on_ssl:加密方式发送
on_file:输出到文本

on_tcp/om_udp


	Module om_tcp
	Host 192.168.1.238
	Port 514

on_file


	Module om_file
	File 'D:\666.log'

on_ssl

语法



    Module             om_ssl

    Host                  DST_IP

    Port                   DST_PORT

    CAFile                CA_CERT

    CertFile              CLIENT_CERT

    CertKeyFile        CLENT_KET

    KeyPass             PASSWORD

    AllowUntrusted     TRUE

    Exec        $raw_event = to_json();


说明:

  1. DST_IP:为发送的目的主机IP地址,或者也可以是域名
  2. DST_PORT: 为发送目的主机端口
  3. CA_CERT:为CA证书路径
  4. CLIENT_CERT:为在服务端为客户机生成的证书
  5. CLIENT_KEY:为在服务端为客户主机生成的key
  6. PASSWORD:证书密码,默认设置为“123456”可修改,根据证书生成时的密码决定


    Module       om_ssl

    Host             192.168.161.96

    Port              1514

    CAFile           %CERTDIR%\ca-cert.pem

    CertFile         %CERTDIR%\client-cert.pem

    CertKeyFile %CERTDIR%\client-key.pem

    KeyPass       123456

    AllowUntrusted     TRUE

    Exec               $raw_event = to_json();



修改输出内容

使用$raw_event变量
比如,下面在输出的日志状况添加一个ip


	Module om_file
	File 'D:\666.log'
	Exec $raw_event = "192.168.161.63 " + $raw_event;

例子

读取/var/log/message传给logstash


    Module  im_file
    File    "/var/log/messages"



    Module  om_tcp
    Host     192.168.1.238
    Port    514



    Path    messages => tcp

读取windows事件发送给logstash


    Module      xm_syslog



    Module      im_msvistalog
# For windows 2003 and earlier use the following:
#   Module      im_mseventlog

    ReadFromLast FALSE
    SavePos     FALSE
    Query       \
                    \
                        \ #配置为只发送Security Log
                    \
                




    Module      om_tcp
    Host        192.168.1.238
    Port        514
    Exec        to_syslog_snare();



    Path        in => out

配置为同时接收多个事件日志


    Module      im_msvistalog
# For windows 2003 and earlier use the following:
#   Module      im_mseventlog

    ReadFromLast FALSE
    SavePos     FALSE
    Query       \
                    \
                        \
                        \
                        \
                    \
                


你可能感兴趣的:(ELK)