Nxlog 配置总结

Nxlog

nxlog基本架构

nxlog是事件驱动的多线程App。nxlog内核只负责配置文件解析/文件和Socket监控/内部事件管理,任何module可以dispatch事件到内核。内核会有选择性分发到对应处理module。

nxlog Config文件基本结构

配置引入

用include引入其他地方的配置,对实际功能无影响。与Apache配置类似,不研究

宏定义

用这个定义一些宏,对实际功能无影响。与C的宏类似,不研究

全局指令

内置的一些指令

Module

一个ConfigBlock如下

<Input instancename>
    Module      im_module
    ...
</Input>

顶级ConfigBlock可以分为四种,Input, Processor, Output and Extension tags.ConfigBlock必须由上面四个类型+命名。命名规则 [a-zA-Z0-9_-]。有一些通用Block可以在多种类型的模块中使用。以下列举一些。

指令 模块范围 作用
FlowControl Input, Processor 顺序控制,但有可能照成消息丢失
Schedule All 通过When,Every,First,Exec四个子指令实现筛选,频率,开始时间
Processors 作废了
InputType Input LineBased,Dgram,Binary
OutputType Output LineBased,Dgram,Binary

Nxlog 语言

类似perl语法,出错可能丢消息。复杂的处理程序可以通过自己编写一个module或者xm_perl模块来实现。 语言是强类型的,不支持Dict,正则只支持=~ 和!~。明确定义以下 "boolean", "integer", "string", "datetime", "ip4addr", "ip6addr", "regexp", "binary".这几种类型。自己有类型推导。同时函数支持多态。

Bool操作

  • if 1 + 1 == (1 + 1) log_info("2");
  • if $Message =~ /^Test (\S+)/ log_info("captured: " + $1);
  • $EventTime = 2000-01-02 03:04:05;

一元操作

  • if not $success log_error("failure");
  • if - -1 != 1 log_error("this should never be printed");
  • if defined(2) log_info("2");
  • if defined undef log_info("never printed");

String =~!~.

  • 返回True如果匹配上,if $Message =~ /^Test message/ log_info("matched");
  • Captured substrings are accessible through a numeric reference such as $1. The full subject string is placed into $0. 不知道支持不支持$#
  • replace用g ,例子if $SourceName =~ s/\s/_/g log_info("removed all whitespace in SourceName");
  • 换行匹配s,例子if $Message =~ /failure/s log_info("failure string present in the message");
  • 大小写忽略i
  • if $Message !~ /^Test message/ log_info("didn't match");

二元操作

  • ==
    • undef == undef = TRUE
    • string == string = boolean
    • integer == integer = boolean
    • boolean == boolean = boolean
    • datetime == datetime = boolean
    • ip4addr == ip4addr = boolean
    • ip4addr == string = boolean
    • string == ip4addr = boolean
  • !=
    • undef != undef = FALSE
    • string != string = boolean
    • integer != integer = boolean
    • boolean != boolean = boolean
    • datetime != datetime = boolean
    • ip4addr != ip4addr = boolean
    • ip4addr != string = boolean
    • string != ip4addr = boolean
  • <=
    • integer <= integer = boolean
    • datetime <= datetime = boolean
  • +
    • integer + integer = integer
    • string + undef = string
    • undef + string = string
    • undef + undef = undef
    • string + string = string Concatenate two strings.
    • datetime + integer = datetime Add the number of seconds in the right value to the datetime stored in the left value.
    • integer + datetime = datetime Add the number of seconds in the left value to the datetime stored in the right value.
  • -
    • integer - integer = integer
    • datetime - datetime = integerSubtract two datetime types. The result is the difference between to two expressed in microseconds.
    • datetime - integer = datetimeSubtract the number of seconds from the datetime stored in the left value.
  • IN NOT IN
    • if $EventID IN (1000, 1001, 1004, 4001) log_info("EventID found");

Function(Return值的函数)

  • string lc(string arg); Convert a string to lower case.
  • string uc(string arg); Convert a string to upper case.
  • string substr(string src, integer from, integer to);
  • string replace(string subject, string src, string dst, integer count); 替换count次,如果count无则全部替换
  • datetime now();
  • string type(unknown arg);Returns the type of a variable. Can be "boolean", "integer", "string", "datetime", "ip4addr", "ip6addr", "regexp", "binary". For values with the unknown type, it returns undef.
  • integer year(datetime datetime); Return the year part from the datetime value.还有mouth day hour minute second
  • string string(unknown arg); 强制类型转换
  • integer integer(unknown arg); 强制类型转换,如果参数是时间类型的,转成时间戳
    • datetime parsedate(string arg); 强制类型转换,如果转化错误,return当前时间
    • string hostname();
    • ip4addr host_ip();
  • dropped(); Return TRUE if the currently processed event has been already dropped.

Procedures(不Return的函数)

  • delete(unknown arg);Delete the field from the event
  • rename_field(string old, string new); 重命名field

Nxlog Module

主要分为四种模块Extension, Input, Processor, Output

Extension

  • CSV模块
  • XML模块
  • JSON模块 Nxlog不支持像二维数组/MAP这种数据类型,所以accessing nested JSON fields is not possible. 另外xm_json 是可以自动识别datetime values的。不用显式的调用parseDate()
  • 多行解析xm_multiline
  • Perl脚本模块Perl (xm_perl)
  • 外部脚本模块xm_exec。实验了一下如何用python脚本处理log。可以做到。但有一些性能上的考虑

Input

Nxlog中在Input中有4个内置值$raw_event, $EventReceivedTime, $SourceModuleName, $SourceModuleType

  • DBI 从数据库里面读数据
  • File 从文件中读日志。可以通过设置SavePos TRUE ReadFromLast FALSE 重启nxlog重复从头读取的问题,但是有可能会出现异常,因为SavePos和nxlog内置cache相关,改变cache有可能导致SavePos失败
  • MS EventLog for Windows 2008/Vista and later im_msvistalog
  • TCPim_tcp
  • UDPim_udp
  • Unix Domain Socket (im_uds)

Processor

  • Filter(pm_filter)
  • Message deduplicator(pm_norepeat)
  • Message Format converter (pm_transformer)

Output modules

我们只有一种方式,就是写tcpout写到logstash里面

  • UDS(om_uds)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,497评论 18 139
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,669评论 0 3
  • 有效 全然的身心合一在当下
    安齐宝阅读 309评论 0 0
  • 《少有人走的路》中曾经写道:“你人生所有的问题,都可以通过高度的自律来解决。” 但自律意味的是“自我约束”,是自自...
    页小禾阅读 248评论 0 1
  • 今天我们一起阅读了《奇迹花园》刺猬先生远行的一章,这是一个很伤感的故事。刺猬先生和太太年纪很大了。刺猬太太...
    小时_cc69阅读 385评论 0 0