概述
SaltStack项目试图让日志系统能够为你工作,并帮助解决在使用过程中可能遇到的任何问题。
本文重点说明了关于Salt Logging系统的配置方法,相同内容也可以选择浏览在github上的另一个文档副本。如果你想获得有关logging 系统更多的细节信息,请转到logging development document 。
LOGGING
LOG LEVELS
日志级别采用数字表示并按顺序排列,将日志级别设置为特定级别后将会记录该级别及更高级别的所有日志语句。 例如,设置log_level:error
将记录error, critical, quiet
级别的语句,不过在quiet级别下不会记录任何内容。
大多数日志记录级别是使用的Python的日志记录库中的默认定义,这可以在官方Python文档中找到。 除标准级别之外,Salt还使用了更多的级别。 所有Salt支持的日志级别如下表所示。
注意:salt使用的Python依赖项可以定义和使用其他日志记录级别。 例如,multiprocessing标准Python库的Python 2版本使用了 subwarning, 25 和 subdebug, 5。
Level | Numeric value | Description |
---|---|---|
quiet | 1000 | Nothing should be logged at this level |
critical | 50 | Critical errors |
error | 40 | Errors |
warning | 30 | Warnings |
info | 20 | Normal log information |
profile | 15 | Profiling information on salt performance |
debug | 10 | Information useful for debugging both salt implementations and salt code |
trace | 5 | More detailed code debugging information |
garbage | 1 | Even more debugging information |
all | 0 | Everything |
AVAILABLE CONFIGURATION SETTINGS
LOG_FILE
日志记录可以发送到常规文件、本地路径名或网络位置。 配置为使用rsyslogd(8)(例如:file:///dev/log)时,远程日志记录效果最佳,即将rsyslogd(8)配置为网络日志记录。 远程地址的格式为:
<file|udp|tcp>://<host|socketpath>:<port-if-required>/<log-facility>
其中log-facility是SysLogHandler文档中定义的syslog工具的符号名称。 它默认为LOG_USER。
Default: 取决于执行的二进制程序名称,例如对于salt-master, 日志文件名会是/var/log/salt/master 。
示例:
log_file: /var/log/salt/master
log_file: /var/log/salt/minion
log_file: file:///dev/log
log_file: file:///dev/log/LOG_DAEMON
log_file: udp://loghost:10514
LOG_LEVEL
Default: warning
设置向终端窗口输出的日志信息级别,取值为以下列表之一: garbage, trace, debug, profile, info, warning, error, critical, quiet 。
log_level: warning
注意:在salt配置文件中添加
log_level:quiet
可以完全禁用日志记录。 如果是在命令行中运行salt,则可以使用–log-level=quiet。
LOG_LEVEL_LOGFILE
Default: info
设置向日志文件输出的日志信息级别,取值为以下列表之一: garbage, trace, debug, profile, info, warning, error, critical, quiet 。
log_level_logfile: warning
LOG_DATEFMT
Default: %H:%M:%S
控制台窗口中日志消息使用的日期和时间格式。 允许的日期/时间格式与time.strftime()中使用的格式一致。
log_datefmt: '%H:%M:%S'
LOG_DATEFMT_LOGFILE
Default: %Y-%m-%d %H:%M:%S
在日志文件中日志消息使用的日期和时间格式。 允许的日期/时间格式与time.strftime()中使用的格式一致。
log_datefmt_logfile: '%Y-%m-%d %H:%M:%S'
LOG_FMT_CONSOLE
Default: [%(levelname)-8s] %(message)s
控制台日志消息的格式。 可以使用所有标准python日志记录的LogRecord属性。 Salt还提供以下自定义LogRecord属性以支持使用彩色的控制台日志输出:
'%(colorlevel)s'
# log level name colorized by level
'%(colorname)s'
# colorized module name
'%(colorprocess)s' # colorized process number
'%(colormsg)s'
# log message colorized by level
注意:%(colorlevel)s,%(colorname)和%(colorprocess)这几个LogRecord属性还包括了空格填充和
[
与]
的部分,以匹配其附属的非着色LogRecord属性的默认值。
log_fmt_console: '[%(levelname)-8s] %(message)s'
LOG_FMT_LOGFILE
Default: %(asctime)s,%(msecs)03d [%(name)-17s][%(levelname)-8s] %(message)s
日志文件记录消息的格式。 可以使用所有标准python日志记录的LogRecord属性。 Salt还提供这些自定义的LogRecord属性,包括填充和括号[和]:
'%(bracketlevel)s'
# equivalent to [%(levelname)-8s]
'%(bracketname)s'
# equivalent to [%(name)-17s]
'%(bracketprocess)s' # equivalent to [%(process)5s]
log_fmt_logfile: '%(asctime)s,%(msecs)03d [%(name)-17s][%(levelname)-8s] %(message)s'
LOG_GRANULAR_LEVELS
Default: {}
这可以用于根据日志调用名称更具体地控制日志记录的级别。 该示例中将主要的salt library设置为warning
级别,将salt.modules设置为debug
级别记录,并将自定义模块的日志设置为all
级别:
log_granular_levels:
'salt': 'warning'
'salt.modules': 'debug'
'salt.loader.saltmaster.ext.module.custom_module': 'all'
LOG_FMT_JID
Default: [JID: %(jid)s]
设置添加到日志消息时的JID格式。
log_fmt_jid: '[JID: %(jid)s]'
EXTERNAL LOGGING HANDLERS
除了salt使用的内部日志处理程序之外,还有一些可以使用的外部程序,请参阅接下来介绍的外部日志记录处理程序文档。
EXTERNAL LOGGING HANDLERS
fluent_mod
Fluent Logging Handler
New in version 2015.8.0.
在fluent配置文件中:
<source>
type forward
bind localhost
port 24224
</source>
然后,要通过fluent以Logstash格式发送日志信息,请将以下内容添加到salt(master和/或minion)配置文件中:
fluent_handler:
host: localhost
port: 24224
要通过fluent以Graylog raw json格式发送日志,请将以下内容添加到salt(master和/或minion)配置文件中:
fluent_handler:
host: localhost
port: 24224
payload_type: graylog
tags:
- salt_master.SALT
上面的例子中还说明了tags选项的使用,它允许在发送的记录上设置描述性(或有用)标记。 如果未提供,则默认为单个标记:‘salt’。 另外请注意,通过Graylog “magic”,已记录消息的"facility"被设置为"SALT"(第一个句点之后的标记部分),而标记本身将设置为"salt_master"。 这是一个功能,而不是一个bug ?
注意:还有第三个emitter,用于GELF格式,但它在很大程度上未经测试,所以目前没有支持此配置的设置,因此在实际场景中当它运行并输出有效的GELF格式时,请反馈给我们任何关于其有用性和正确性的消息。
LOG LEVEL
fluent_handler配置部分支持自定义日志输出的log_level级别。 如果未设置,则使用全局配置文件部分中为log_level定义的日志级别。
实现这个Fluent Logging Handler的灵感是来自于fluent-logger-python
log4mongo_mod
LOG4MONGO LOGGING HANDLER
该模块提供了一个日志处理程序,用于将salt日志发送到MongoDB 。
CONFIGURATION
在salt 的配置文件中 (e.g. /etc/salt/{master,minion}):
log4mongo_handler:
host: mongodb_host
port: 27017
database_name: logs
collection: salt_logs
username: logging
password: reindeerflotilla
write_concern: 0
log_level: warning
LOG LEVEL
如果未设置,则使用全局配置文件部分中为log_level定义的日志级别。
这项工作主要是受LogStash和Sentry的Salt日志处理程序的启发,并基于log4mongo Python实现的。
logstash_mod
Logstash Logging Handler
New in version 0.17.0.
这个模块提供了 Logstash logging handlers处理程序。
UDP LOGGING HANDLER
当Logstash version < 1.2.0时:
在salt的配置文件中:
logstash_udp_handler:
host: 127.0.0.1
port: 9999
version: 0
msg_type: logstash
在Logstash 的配置文件中:
input {
udp {
type => "udp-type"
format => "json_event"
}
}
当Logstash version >= 1.2.0 时:
salt 配置文件:
logstash_udp_handler:
host: 127.0.0.1
port: 9999
version: 1
msg_type: logstash
Logstash 配置文件:
input {
udp {
port => 9999
codec => json
}
}
有关其他信息,请阅读UDP输入配置页面。
ZEROMQ LOGGING HANDLER
Logstash version < 1.2.0时:
salt 配置文件:
logstash_zmq_handler:
address: tcp://127.0.0.1:2021
version: 0
Logstash 配置文件:
input {
zeromq {
type => "zeromq-type"
mode => "server"
topology => "pubsub"
address => "tcp://0.0.0.0:2021"
charset => "UTF-8"
format => "json_event"
}
}
Logstash version >= 1.2.0时:
salt 配置文件:
logstash_zmq_handler:
address: tcp://127.0.0.1:2021
version: 1
Logstash 配置文件:
input {
zeromq {
topology => "pubsub"
address => "tcp://0.0.0.0:2021"
codec => json
}
}
请阅读ZeroMQ输入配置页面以获取更多信息。
重要的 Logstash 设置:
关于这些日志记录处理程序的Logstash配置文件中不应忘记的最重要设置之一是format
。 UDP和ZeroMQ输入都需要format
为json_event
,这是我们通过线路发送的数据格式。
LOG LEVEL
logstash_udp_handler
和logstash_zmq_handler
配置都接受自定义的log_level
级别设置。 如果未设置,则使用全局配置文件部分中为log_level
定义的日志级别。
HWM
ZMQ socket setting配置中的 high water mark 仅适用于 logstash_zmq_handler
。
该模块的开发是基于 pylogstash, python-logstash, canary 和 the PyZMQ logging handler实现的。
sentry_mod
Sentry Logging Handler
New in version 0.17.0.
此模块提供Sentry日志记录处理程序的支持。 Sentry是一个开源的错误跟踪系统,提供有关生产环境中发生的异常的深层背景信息,有关堆栈跟踪的详细信息以及异常时可用的上下文变量,这些都可以从在线界面轻松浏览和过滤使用。 有关详细信息,请参阅Sentry。
注意:需要在系统上安装Raven库才能使此日志记录处理程序可用。
配置python Sentry客户端和Raven应该在配置了sentry_handler
密钥后完成。 可以为相应的grain项目提供附加上下文。 至少,需要定义DSN。 举个例子:
sentry_handler:
dsn: https://pub-key:secret-key@app.getsentry.com/app-id
可以实现更复杂的配置,例如:
sentry_handler:
servers:
- https://sentry.example.com
- http://192.168.1.1
project: app-id
public_key: deadbeefdeadbeefdeadbeefdeadbeef
secret_key: beefdeadbeefdeadbeefdeadbeefdead
context:
- os
- master
- saltversion
- cpuarch
- ec2.tags.environment
注意:Sentry 3.0以上版本不支持public_key 和 secret_key 变量,需要使用 DSN key 作为替代。
支持所有的客户端配置密钥,请参阅Raven客户端文档。
sentry处理程序的默认日志记录级别为ERROR
。 如果要定义另一个,请在sentry_handler
配置键下自定义log_level
:
sentry_handler:
dsn: https://pub-key:secret-key@app.getsentry.com/app-id
log_level: warning
可用的日志级别也可用于salt cli工具和配置; salt --help可以提供所需的信息。
THREADED TRANSPORTS
Raven的文档将其 threaded transport 用于关键应用程序的建议是正确的。 但是,请不要忘记,如果在启用线程传输后开始遇到Salt使用问题,请尝试切换到非线程传输,看看是否能解决您的问题。
最后
以上就是义气鸡为你收集整理的SaltStack Logging 日志系统配置指南LOGGINGEXTERNAL LOGGING HANDLERS的全部内容,希望文章能够帮你解决SaltStack Logging 日志系统配置指南LOGGINGEXTERNAL LOGGING HANDLERS所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复