SaltStack Logging 日志系统配置指南

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。

LevelNumeric valueDescription
quiet1000Nothing should be logged at this level
critical50Critical errors
error40Errors
warning30Warnings
info20Normal log information
profile15Profiling information on salt performance
debug10Information useful for debugging both salt implementations and salt code
trace5More detailed code debugging information
garbage1Even more debugging information
all0Everything

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输入都需要formatjson_event,这是我们通过线路发送的数据格式。

LOG LEVEL

logstash_udp_handlerlogstash_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使用问题,请尝试切换到非线程传输,看看是否能解决您的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值