当前位置: 首页 > 工具软件 > nxlog > 使用案例 >

Nxlog研究

谭桐
2023-12-01

1、日志收集策略有误,如果填了不存在类型的日志就会报此种错误

> ERROR failed to subscribe to msvistalog events,the channel was not found
> [error code: 15007]; The specified channel could not be found. Check
> channel configuration.

2018-09-11 15:48:24 ERROR failed to subscribe to msvistalog events,the channel was not found [error code: 15007]; 无法找到指定的通道。请检查通道配置。

2018-09-11 16:01:54 ERROR failed to subscribe to msvistalog events using bookmark: 指定的队列无效。 

2018-09-11 16:01:54 ERROR failed to subscribe to msvistalog events,the Query is invalid: [error code: 15001]


调用函数

NXlog的核心包含了一些内置的语法。它能够完成一些更加复杂的日志处理功能。当NXLog启动的时候,内置的语言就会被预编译,如果程序出错了,NXLog会提示错误信息的。

函数使用位置

1、指令中的变量 2、Exec中执行相应程序

NXLog语言不包含异常捕获程序,如果出错了,会在NXLog的日志中打印出来,如果在处理的时候出错了,那很可能就会把日志丢掉了

类型 

NXLog语言是强类型程序,NXLog 语言只支持简单类型,复杂的类型例如HashMap这种是不支持的

 

描述

Unknown 未知类型 
Boolean 可用TRUE、FALSE、undefined 
Integer 整形 
String 字符串,undefined字符串和空字符串相等,一个字符串最多放1M,编译时就决定了的 
Datetime 时间戳 
IPv4 Address IP地址‍‍ 
IPv6 Address IP地址‍‍
正则表达式 只能用=~ 或者!~操作符‍‍‍ 
Binary 可用保存bytes数组‍ 
Variadic arguments 变长参数 
表达式

和常规的开发语言差不多,变量用$xxx这样声明,一些示例:

条件非

ifnot$successlog_error("failure"); 

正则匹配

if$Message=~/^Testmessage/log_info("matched"); 

使用/g进行全局替换

if$SourceName=~s//s/_/glog_info("removedallwhitespaceinSourceName"); 

使用/s代替.*

if$Message=~/failure/slog_info("failurestringpresentinthemessage"); 

/m能代替正则的^和$

/i能忽略大小写匹配

静态计数器 

NXLog有一些静态计数器,可以用create_stat来调用

if$Message=~/loginfailure/ 

#createwillnodoanythingifthecounteralreadyexists 
create_stat('login_failures','RATE',45,$EventTime); 
add_stat('login_failures',1,$EventTime); 
ifget_stat('login_failures',$EventTime)>=3 
log_warning("3ormoreloginfailuresdetectedwithin45seconds"); 

COUNT 累计计数器 
COUNTMIN 计算给定变量的最小值 
COUNTMAX 计算给定变量的最大值 
AVG 计算给定变量的平均值 
AVGMIN 计算给定变量的最小值平均值的 
AVGMAX 计算给定变量的最小值平均值的
RATE 指定时间间隔的值 
RATEMIN 指定时间间隔的最小值‍ 
RATEMAX 指定时间间隔的最大值 
GRAD 计算在指定的时间间隔上的计数器的速率的变化
GRADMIN 计算在指定的时间间隔上的计数器的速率的最大值 
GRADMAX 计算在指定的时间间隔上的计数器的速率的最小值 
一些内置函数  
string lc(string arg); 把字符串转成小写
string uc(string arg); 把字符串转成大写 
datetime now(); 当前时间 
string type(unknown arg); 返回变量类型,"boolean", "integer", "string", "datetime", "ip4addr", "ip6addr", "regexp", "binary" 
integer microsecond(datetime datetime); 转为微秒 
integer second(datetime datetime); 转为秒 
integer minute(datetime datetime); 转为分钟
integer hour(datetime datetime) 转为小时 
integer day(datetime datetime)转为天 
integer month(datetime datetime) 转为月 
integer year(datetime datetime) 转为年 
datetime fix_year(datetime datetime); 设置当前时间的年,BSD syslog或者cisco timestamp会把年丢掉的 
integer dayofweek(datetime datetime) 返回一周的第几天 
integer dayofyear(datetime datetime) 返回一年的第几天 
string string(unknown arg); 转为string 
integer integer(unknown arg) 转为integer
datetime datetime(integer arg) 转为datetime 
datetime parsedate(string arg) 

转为date,

例:$EventTime = parsedate($somestring); if not defined($EventTime) $EventTime = now(); 

string strftime(datetime datetime, string fmt); 格式化字符串 
datetime strptime(string input, string fmt); 格式化日期 
string hostname(); 获取主机名 
string hostname_fqdn(); 获取主机名 
ip4addr host_ip(); 获取主机IP 
ip4addr host_ip(integer nth); 获取非本地回路IP 
unknown get_var(string varname); 获取变量
integer get_stat(string statname); 获取计数器的值 
integer get_stat(string statname, datetime time); 获取计数器的值,如果不存在就把time设进去 
ip4addr ip4addr(integer arg) 转为ipv4类型 
ip4addr ip4addr(integer arg, boolean ntoa); 转为IPV4类型,ntoa代表是否反转 
string substr(string src, integer from); 字符串截取 
string substr(string src, integer from, integer to); 字符串截取 
string replace(string subject, string src, string dst); 字符串替换 
string replace(string subject, string src, string dst, integer count); 字符串替换 
integer size(string str); 获取字符串长度 
boolean dropped(); 如果当前事件drop了,返回True 
内置处理函数  
log_debug(unknown arg, varargs args);打印日志,级别为Debug 
debug(unknown arg, varargs args); 打印日志,级别为Debug 
log_info(unknown arg, varargs args); 打印日志,级别为Info 
log_warning(unknown arg, varargs args); 打印日志,级别为Warning 
log_error(unknown arg, varargs args); 打印日志,级别为Error 
delete(unknown arg); 删除日志里面的指定字段 
create_var(string varname); 创建模块变量 
create_var(string varname, integer lifetime); 创建模块变量并指定生存周期 
create_var(string varname, datetime expiry); 创建模块变量并指定生存周期 
delete_var(string varname); 删除变量 
set_var(string varname, unknown value); 设置变量 
create_stat(string statname, string type); 创建计数器 
create_stat(string statname, string type, integer interval); 创建计数器 
create_stat(string statname, string type, integer interval, datetime time); 创建计数器 
create_stat(string statname, string type, integer interval, datetime time, integer lifetime); 创建计数器 
create_stat(string statname, string type, integer interval, datetime time, datetime expiry); 创建计数器 
add_stat(string statname, integer value); 添加计数器值 
add_stat(string statname, integer value, datetime time); 添加计数器值 
sleep(integer interval); 休眠指定时长 
drop(); 放弃处理当前日志 
rename_field(string old, string new); 修改日志字段名称 
reroute(string routename);动态指定路由 
add_to_route(string routename); 复制一份日志动态指定路由,不影响当前日志流 

 

 类似资料: