> 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/ |
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); | 复制一份日志动态指定路由,不影响当前日志流 |