模板是rsyslog的一个关键特性。 它们允许指定用户可能需要的任何格式。 它们也用于生成动态文件名。 rsyslog中的每个输出都使用模板 - 这适用于文件,用户消息等。 数据库编写者期望它的模板是一个适当的SQL语句 - 所以这也是高度可定制的。 您可能会问,如果没有指定任何模板,所有这些工作如何进行。 好问题 ;)。 但答案很简单。 模板与硬编码到rsyslogd中的stock syslogd格式兼容。 所以如果没有指定模板,我们使用这些硬编码模板之一。 在rsconf.c中搜索“template_”,你会发现硬编码的。
模板由template()语句指定。 它们也可以通过$ template legacy语句指定。
注意:模板的关键元素是rsyslog属性。 请参阅rsyslog属性参考以获取可用列表。
2018年4月16日星期一
rsyslog Properties
rsyslog中的数据项称为“属性”。 他们可以有不同的起源源于。 每当你想访问数据项时,你都需要访问相应的属性以获取其起源。
属性被用于:
以下消息属性存在:
msg(消息的信息部分)
rawmsg(原始消息。 对于调试应该是有用的,并且如果消息应该完全没有改变地被转发。 请注意,EscapecontrolCharactersOnReceive是默认启用的,因此它可能与套接字中收到的不同。)
rawmsg-after-pri()
hostname(消息来源的主机名)
source(hostname的别名)
fromhost(接收到消息的系统主机名(在中继链中,这是紧挨着我们的系统,不一定是原始发送者)。 这是一个DNS解析的名称,除非不可能或DNS解析已被禁用。)
programname(BSD syslogd定义的tag的“静态”部分。 例如,当TAG是“named[12345]”时,程序名是“named”。)
请注意,有些应用程序在标签的静态部分包含斜杠,例如“app/ foo[1234]”。 在这种情况下,程序名是“app”。 如果他们像“/ app / foo [1234]”那样存储绝对路径名,则程序名将变为空(“”)。 如果您需要将斜线实际存储为程序名的一部分,则可以使用全局选项
(parser.permitSlashInProgramName=”on”)
以允许这一点。 然后,“/ app / foo [1234]”的syslogtag将导致程序名为“/ app / foo”。 注意:此选项从rsyslogd版本8.25.0开始可用。
更多参考这里:https://www.rsyslog.com/doc/v8-stable/configuration/properties.html
属性被用于:
- templates(模版)
- conditional statements(条件)
Message Properties
这些由rsyslog解析器从原始消息中提取。 所有消息属性都以字母开头。以下消息属性存在:
msg(消息的信息部分)
rawmsg(原始消息。 对于调试应该是有用的,并且如果消息应该完全没有改变地被转发。 请注意,EscapecontrolCharactersOnReceive是默认启用的,因此它可能与套接字中收到的不同。)
rawmsg-after-pri()
hostname(消息来源的主机名)
source(hostname的别名)
fromhost(接收到消息的系统主机名(在中继链中,这是紧挨着我们的系统,不一定是原始发送者)。 这是一个DNS解析的名称,除非不可能或DNS解析已被禁用。)
programname(BSD syslogd定义的tag的“静态”部分。 例如,当TAG是“named[12345]”时,程序名是“named”。)
- end of tag
- nonprintable character
- ‘:’
- ‘[‘
- ‘/’
请注意,有些应用程序在标签的静态部分包含斜杠,例如“app/ foo[1234]”。 在这种情况下,程序名是“app”。 如果他们像“/ app / foo [1234]”那样存储绝对路径名,则程序名将变为空(“”)。 如果您需要将斜线实际存储为程序名的一部分,则可以使用全局选项
(parser.permitSlashInProgramName=”on”)
以允许这一点。 然后,“/ app / foo [1234]”的syslogtag将导致程序名为“/ app / foo”。 注意:此选项从rsyslogd版本8.25.0开始可用。
更多参考这里:https://www.rsyslog.com/doc/v8-stable/configuration/properties.html
Filter conditions
Filter Conditions
rsyslog 提供四种不同的“Filter conditions”1. 传统的基于severity 和 facility的Selectors
2. 基于property的过滤器
3. 基于表达的过滤器
4. BSD格式块(不向上兼容)
Selectors(选择器)
选择器是传统的过滤syslog的方式。选择器是过滤系统日志消息的传统方式。 它们一直保存在rsyslog中,它们保存syslog原始的格式,因为众所周知的,高效的,并且也需要与stock syslogd配置文件兼容。如果你只需要根据priority和facility进行过滤,你应该选择这种方式,因为用它可以写最少的代码。在v7版本之前,selector行比advanced格式更具效率,但是现在不在存在这种问题。
selector字段由两个部分组成,facility和priority,他们用'.'号分隔。在syslog(3)中有他们的描述。
facility的取值可以有auth, authpriv, cron, daemon, kern, lpr, mail, mark, news, syslog, user, uucp and local0 through local7.它用来特指产生消息的子系统。
priority的取值可以有debug, info, notice, warning, warn (same as warning), err, error (same as err), crit, alert, emerg, panic (same as emerg). 它定义了消息的重要程度。
在selector格式中,如果指定了消息等级,会返回该等级及以上的消息等级。除此之外,‘*’表示所有的facility类型或者所有的priority类型。‘none’表示不传递这个facility的信息。你也可以用‘,’指定相同等级的多个facility。
多个selector之间可以用‘;’分隔。selector字段中的每一个selector都有覆盖前面的能力,使用这一特性可以有效的排除你不想要的设备消息。你也可以用‘=’指定某个优先级。也可用‘!’忽略某个优先级。
Property-Based Filters
基于属性的过滤器对于rsyslogd是唯一的。 它们允许过滤任何属性,如HOSTNAME,syslogtag和msg。 rsyslog属性文档中可以找到所有当前支持的属性列表。 使用此过滤器,可以使用指定的比较操作,针对指定的值检查每个属性。基于属性的过滤器必须以列1中的冒号开头。这告诉rsyslogd它是新的过滤器类型。 冒号后面必须跟着属性名称,逗号,要执行的比较操作的名称,另一个逗号以及要比较的值。 这个值必须被引用。 逗号之间可以有空格和制表符。 属性名称和比较操作区分大小写,因此“msg”起作用,而“MSG”是无效的属性名称。 简言之,语法如下:
:属性,[!]比较操作,“值”(:property, [!]compare-operation, "value")
Compare-Operations
比较操作支持下列内容:contains :检查是不是包含属性,只支持精准匹配。
isequal:检查值是否相等
startswith: 检查信息的开头是不是某属性值(:msg, startswith, "val")
regex: 将值与属性进行比较
ereregex: 将该属性与提供的POSIX ERE正则表达式进行比较。
您可以立即在比较操作前使用bang-character(!),否则此操作的结果将被取消。 例如,如果msg包含“This is an informative message”,则下面的示例不匹配:
:msg, contains, "error"
但是下面是成功的:
:msg, !contains, "error"
如果您想要进行一些通用处理但排除某些特定事件,则使用否定可能很有用。 您可以结合使用丢弃操作。 如下:
*.* /var/log/allmsgs-including-informational.log :msg, contains, "informational" ~ *.* /var/log/allmsgs-but-informational.log不要忽视第2行的代字符! 在本示例中,所有消息都写入文件allmsgs-including-informational.log。 然后,包含字符串“信息”的所有消息都将被丢弃。 这意味着“丢弃线”(我们示例中的编号2)下方的配置文件行将不会应用于此消息。 然后,所有其余的行也将写入文件allmsgs-but-informational.log。
Value Part
值是一个带引号的字符串。 它支持一些转义序列:“ - 引号字符(例如”带有“引号”的字符串“)
\ - 反斜线字符(例如“C:\ tmp”)
转义序列总是以反斜杠开始。 未来可能会添加其他转义序列。 反斜线字符必须转义。 然后,上面列出的任何其他序列都是无效的,并可能导致不可预知的结果。
可能“msg”是基于property的过滤器最突出的用例。 这是实际的消息文本。 如果您想根据某些消息内容(例如特定代码的存在)进行过滤,则可以通过以下方式轻松完成此操作:
:msg, contains, "ID-4711"
当消息包含字符串“ID-4711”时,此过滤器将匹配。 请注意,比较是区分大小写的,所以如果消息中包含“id-4711”,它将不匹配。
:msg, regex, "fatal .* error"
此过滤器使用POSIX正则表达式。 当字符串包含“fatal”和“error”之间的任何内容时(’fatal net error”和“fatal lib error”,但不包含“fatal error”)。
Expression-Based Filters
基于表达的过滤器允许过滤任意复杂的表达式,他可以包含boolean, 数学符号和其他的string操作,expression过滤器将演变为完整的配置脚本语言。不幸的是,他们的语法在这个过程中会稍微改变。 所以如果你现在使用它们,你需要准备好一段时间后更改你的配置文件。基于expression的过滤器在新行的第1列中用关键字“if”表示。 他们有这样的格式:、
if expr then action-part-of-selector-line如果“和”那么“是可能存在的固定关键字。 “expr”是一个(可能相当复杂的)表达式。 所以表达文件的细节。 “action-part-of-selector-line”是一个动作,就像你所知道的那样(例如写入该文件的“/ var / log / logfile”)。
Expressions
该语言支持任意复杂的表达式。 所有常用的操作员都受支持 操作的优先顺序如下(列表中较低的操作在列表中较高,例如在添加之前完成乘法。- expressions in parenthesis(括号中的表达式)
- not, unary minus(not, 一元减号)
- *, /, % (modulus, as in C)
- +, -, & (string concatenation)
- ==, !=, <>, <, >, <=, >=, contains (strings!), startswith (strings!)
- and
- or
BSD-style Blocks
v7以上不再支持,推荐不要使用
Examples
*.* /var/log/file1 # the traditional way
if $msg contains 'error' then /var/log/errlog # the expression-based way
现在,如果您想检查facility和severity,则需要指定数值。 这些可以在RFC 5424中找到。如果你不喜欢这样,你当然也可以使用文本属性 - 只要确保使用正确的。 随着表达支持的增强,这将会改变。 例如,如果要过滤具有设备local0的消息,请以“DEVNAME”开头,并在消息内容中包含“error1”或“error0”,您可以使用以下过滤器:
if $syslogfacility-text == 'local0' and $msg startswith 'DEVNAME' and ($msg contains 'error1' or $msg contains 'error0') then /var/log/somelog
请注意,以上所有内容必须在一行中! 如果你想存储除了那些包含“error1”或“error0”的消息,你只需要添加一个“not”:
if $syslogfacility-text == 'local0' and $msg startswith 'DEVNAME' and not ($msg contains 'error1' or $msg contains 'error0') then /var/log/somelog
如果您希望进行不区分大小写的比较,请使用“contains_i”而不是“contains”和“startswith_i”而不是“startswith”。 请注意,基于表达式的过滤器目前不支持正则表达式。 当函数支持被添加到表达式引擎时,这些将被添加(原因是正则表达式将是一个单独的可加载模块,在它可以被实现之前需要更多的前提条件)。
2018年4月13日星期五
rsyslog Control Structures
http://blog.51cto.com/linuxme/950051
Control Structures
RainerScript中的控制结构和C,java,javascript等程序中都非常相似。
if
Foreach可以迭代数组和对象。 与数组迭代(有序)相反,对象迭代以任意顺序访问键值(无序)。
对于下面的foreach调用:
continue
Filter Conditions
Control Structures
RainerScript中的控制结构和C,java,javascript等程序中都非常相似。
if
if ($msg contains "important") then {
if ( $.foo != "" ) then set $.foo = $.bar & $.baz;
action(type="omfile" file="/var/log/important.log" template="outfmt")
}
if/else-if/elseif ($msg contains "important") then {
set $.foo = $.bar & $.baz;
action(type="omfile" file="/var/log/important.log" template="outfmt")
} else if ($msg startswith "slow-query:") then {
action(type="omfile" file="/var/log/slow_log.log" template="outfmt")
} else {
set $.foo = $.quux;
action(type="omfile" file="/var/log/general.log" template="outfmt")
}
foreachForeach可以迭代数组和对象。 与数组迭代(有序)相反,对象迭代以任意顺序访问键值(无序)。
对于下面的foreach调用:
foreach ($.i in $.collection) do {
...
}
foreach ($.quux in $!foo) do {
action(type="omfile" file="./rsyslog.out.log" template="quux")
foreach ($.corge in $.quux!bar) do {
reset $.grault = $.corge;
action(type="omfile" file="./rsyslog.out.log" template="grault")
if ($.garply != "") then
set $.garply = $.garply & ", ";
reset $.garply = $.garply & $.grault!baz;
}
}
callcontinue
Filter Conditions
2018年4月11日星期三
日志相关rsyslog
非常详细
https://www.mtyun.com/library/how-to-config-rsyslog
Basic Structure
本节描述rsyslog配置基本上如何工作。 将rsyslog想象成一个大型日志记录和事件处理工具集。 它可以被认为是一个基本处理的框架,它以数据流的形式传输,并在消息流上是高度可定制的。 在配置期间,通过定义和自定义rsyslog对象完成此定制。
Quick Overview Of Message Flow and Objects
信息在输入模块的帮助下进入rsyslog,接着他们会被送入一个规则集,当规则被匹配时,消息被传送到对应的action,其可能是某个具体的文件也有可能是某个远程主机。
Processing Principles
1. 输入模块提交信息到规则集
1.1 如果规则集没有明确指定,使用默认规则集
2. 在默认情况下,只有一个规则集
3. 可以添加用户定义的规则集
4. 每个规则集包含一个或多个规则
4.1 允许0条规则的规则集,但他显然是没有意义的
5. 一条规则包含一个过滤器和一个action列表
6. 过滤器 提供yes/no的决策
7. 如果一个过滤器被匹配,相应的action会被执行。如果没有,则什么都不会发生
8. 规则将按照给定规则集中的第一个到最后一个规则的顺序进行评估。 没有来自不相关规则集的规则会被执行。
9. 无论过滤器是否匹配,所有规则总是得到充分评估(所以我们不停止第一场比赛)。 如果消息处理应停止,则必须明确执行“丢弃”操作(由代字符或停止命令表示)。 如果丢弃被执行,则消息处理立即停止,而不评估任何进一步的规则
10. 一个action列表包含一个或多个action
11. 要在列表中有多个动作,必须将和号字符放在过滤器的位置,并且这必须紧跟前一个动作
12-以下:不要使用legacy方式写配置文件
Configuration File
rsyslog默认从rsyslog.conf文件读取配置,这个文件可以包含到其他文件的链接
不同路径的配置文件可以通过-f <file> rsyslogd命令行可以指定。
Statement Types
syslog 支持三种不同类型的配置表述:
1. sysklogd 这是一种旧格式,对于基础的使用非常有用,某些格式不再兼容,因为他与新特征不兼容。这些在兼容性文档中有提到。
2. legacy rsyslog 不建议使用
3. rainerScript 这是一种新的格式,他是一种更好更精确的格式,可以用于更复杂的情况。与传统格式相同,他也不区分大小写。
rsyslog.conf文件由语句组成。 对于旧格式(sysklogd&legacy rsyslog),行确实很重要。 对于新风格(RainerScript),行间距不相关。 最重要的是,这意味着采用新风格的动作,并且所有其他对象可以按照用户的需要进行分割。
https://www.mtyun.com/library/how-to-config-rsyslog
Basic Structure
本节描述rsyslog配置基本上如何工作。 将rsyslog想象成一个大型日志记录和事件处理工具集。 它可以被认为是一个基本处理的框架,它以数据流的形式传输,并在消息流上是高度可定制的。 在配置期间,通过定义和自定义rsyslog对象完成此定制。
Quick Overview Of Message Flow and Objects
信息在输入模块的帮助下进入rsyslog,接着他们会被送入一个规则集,当规则被匹配时,消息被传送到对应的action,其可能是某个具体的文件也有可能是某个远程主机。
Processing Principles
1. 输入模块提交信息到规则集
1.1 如果规则集没有明确指定,使用默认规则集
2. 在默认情况下,只有一个规则集
3. 可以添加用户定义的规则集
4. 每个规则集包含一个或多个规则
4.1 允许0条规则的规则集,但他显然是没有意义的
5. 一条规则包含一个过滤器和一个action列表
6. 过滤器 提供yes/no的决策
7. 如果一个过滤器被匹配,相应的action会被执行。如果没有,则什么都不会发生
8. 规则将按照给定规则集中的第一个到最后一个规则的顺序进行评估。 没有来自不相关规则集的规则会被执行。
9. 无论过滤器是否匹配,所有规则总是得到充分评估(所以我们不停止第一场比赛)。 如果消息处理应停止,则必须明确执行“丢弃”操作(由代字符或停止命令表示)。 如果丢弃被执行,则消息处理立即停止,而不评估任何进一步的规则
10. 一个action列表包含一个或多个action
11. 要在列表中有多个动作,必须将和号字符放在过滤器的位置,并且这必须紧跟前一个动作
12-以下:不要使用legacy方式写配置文件
Configuration File
rsyslog默认从rsyslog.conf文件读取配置,这个文件可以包含到其他文件的链接
不同路径的配置文件可以通过-f <file> rsyslogd命令行可以指定。
Statement Types
syslog 支持三种不同类型的配置表述:
1. sysklogd 这是一种旧格式,对于基础的使用非常有用,某些格式不再兼容,因为他与新特征不兼容。这些在兼容性文档中有提到。
2. legacy rsyslog 不建议使用
3. rainerScript 这是一种新的格式,他是一种更好更精确的格式,可以用于更复杂的情况。与传统格式相同,他也不区分大小写。
rsyslog.conf文件由语句组成。 对于旧格式(sysklogd&legacy rsyslog),行确实很重要。 对于新风格(RainerScript),行间距不相关。 最重要的是,这意味着采用新风格的动作,并且所有其他对象可以按照用户的需要进行分割。
Recommended use of Statement Types
一般建议使用RainerScript类型的语句,因为它们提供简洁易读的控制流以及无疑哪些参数处于活动状态。 它们对包含文件也没有副作用,这可能是传统rsyslog语句的主要障碍。
对于非常简单的事情,仍然建议使用sysklogd语句类型,特别是如果完整配置包含这样简单的事情。 经典示例通过优先级写入文件(或转发)。 在sysklogd中,这看起来像:
mail.info /var/log/mail.log mail.err @server.example.net
这种简单性很难被打败,仍然在课程中教授,很多人都知道这种语法。 即使在新编写的配置文件中使用这些构造也是完全正确的。
根据经验,RainerScript配置语句应该在以下情况下使用:
1. 需要配置参数(例如,旧式语句(legacy)的动作...类型)
2. 需要更详细的流程控制(例如,当多个动作必须在相同条件下嵌套时)
Comments
有两种类型的注释:
1. #
2. /* content*/
Processing Order
指令从rsyslog.conf的顶部处理到底部。 订单很重要。 例如,如果您停止处理消息,显然停止语句之后的所有语句都不会被评估。
Flow Control Statements
流程控制如下:
1. Control Strictures
2. Filter Conditions
Data Manipulation Statements
数据操作由set, unset 和 reset 实现, 详细请看这里
Inputs
每个输入需要一个输入模块,它实现输入的载入和监听。完整的定义看rsyslog modules ,一旦被加载,输入就通过input()定义。
Outputs
输出也被叫做actions,少量的actions是预先加载的(如输出文件writer),其他的必须像inputs一样加载。
Rulesets and Rules
规则集和规则构成了rsyslog处理的基础。 简而言之,规则是rsyslog如何处理特定消息的一种方式。 通常,在规则前面有一种过滤器(if语句)。 规则的复杂嵌套是可能的,就像在编程语言中一样。
规则集是规则的容器。 一个规则集可以包含许多规则。 在编程语言的比喻中,人们可能会认为规则集就像是一个程序。 规则集可以“绑定”(分配)到特定的输入。 在类推中,这意味着当一个消息通过该输入进入时,绑定到它的“程序”(规则集)将被执行(但不是任何其他的!)。
程序的上线(也就是部署)
编译好的代码(经常是二进制文件)到线上的服务器
需要使用supervisorctl
配置文件/etc/supervisord.conf ,在里面配置你需要上线的服务,
然后在supervisord.conf指定的目录下配置项目上线指定的配置,即可上线
这时候想要吧进程删除,他会自动重启
需要使用supervisorctl
配置文件/etc/supervisord.conf ,在里面配置你需要上线的服务,
然后在supervisord.conf指定的目录下配置项目上线指定的配置,即可上线
这时候想要吧进程删除,他会自动重启
订阅:
评论 (Atom)
leetcode 17
17. Letter Combinations of a Phone Number Medium Given a string containing digits from 2-9 inclusive, return all possible l...
-
ptb的代码可以详见gitlab上的tensorflow/models/tutorials下,本文只详解他的数据前处理和模型部分。 1.运行 首先说一下他的运行 ,下载数据集: http://www.fit.vutbr.cz/~imikolov/rnnlm/simple-e...
-
写在开头,以下是我在过程中遇到的一些问题 1.关于KNN算法代码里的一些问题 1.1关于numpy的sum用法 Check out the documentation for numpy.sum, paying particular attention to the ...