标签: syslog-ng

Python logging.DEBUG级别不记录

我有python的logginglib 的问题.使用下面的代码,我创建了一个"记录器":

logger = logging.getLogger()
def logger_init(level):
    try:
        syslog = SysLogHandler(address=LOG_DESTINATION)
    except Exception, ex:
        return
    formatter = logging.Formatter('%(module)s[%(process)d]: %(message)s')
    syslog.setFormatter(formatter)
    syslog.setLevel(level)
    logger.addHandler(syslog)
Run Code Online (Sandbox Code Playgroud)

我称之为:

logger.debug(SOME_STR_TO_BE_LOGGED)

或者喜欢:

logger.error(SOME_STR_TO_BE_LOGGED)

我用以下内容初始化记录器:

log_level = logging.ERROR
if options.DEBUG_LOG: ####  This comes from options parser and it is True.
    log_level = logging.DEBUG
logger_init(log_level)
Run Code Online (Sandbox Code Playgroud)

该问题是error,和warn工作得很好,但既不info也不debug方法打印任何东西到syslog.

我使用的是syslog-ng的,我设计我的过滤器,即它会接受来自各个层面debugemerg.

这里有什么问题?有任何想法吗?

python logging syslog-ng

31
推荐指数
1
解决办法
1万
查看次数

与syslog消息格式混淆

我对syslog消息格式有点困惑.我必须编写一个解析syslog消息的程序.当我读到我在syslog-ng实例中得到的内容时,我得到这样的消息:

Jan 12 06:30:00 1.2.3.4 apache_server: 1.2.3.4 - - [12/Jan/2011:06:29:59 +0100] "GET /foo/bar.html HTTP/1.1" 301 96 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 ( .NET CLR 3.5.30729)" PID 18904 Time Taken 0
Run Code Online (Sandbox Code Playgroud)

我可以清楚地确定真实的消息(在这种情况下是Apache访问日志消息)其余的是关于系统日志消息本身的元数据.

但是,当我阅读RFC 5424时,消息示例如下所示:

没有结构化数据

 <34>1 2003-10-11T22:14:15.003Z mymachine.example.com su - ID47 - BOM'su root' failed for lonvick on /dev/pts/8
Run Code Online (Sandbox Code Playgroud)

或结构化数据

<165>1 2003-10-11T22:14:15.003Z mymachine.example.com evntslog - ID47 [exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"] BOMAn application event log entry...
Run Code Online (Sandbox Code Playgroud)

所以现在我有点困惑.什么是正确的系统日志消息格式?这是RFC 5424废弃RFC 3164的规范版本问题?

syslog rsyslog syslog-ng

17
推荐指数
1
解决办法
4万
查看次数

如何在Python Logging中设置源主机地址?

有一个用Python编写的脚本,它通过IPMI解析来自多个服务器的传感器数据和事件.然后它将图形数据发送到一个服务器,并将错误日志发送到另一个服 记录服务器是Syslog-ng + Mysql

因此,任务是按所有者存储日志,而不是由脚本宿主存储.

一些代码示例:

import logging
import logging.handlers

loggerCent = logging.getLogger(prodName + 'Remote')
ce = logging.handlers.SysLogHandler(address=('192.168.1.11', 514), facility='daemon')
formatter = logging.Formatter('%(name)s: %(levelname)s: %(message)s')
loggerCent.setLevel(logging.INFO)

loggerCent.addHandler(ce)

loggerCent.warning('TEST MSG')
Run Code Online (Sandbox Code Playgroud)

所以我需要扩展代码,以便我可以告诉syslog-ng,日志属于另一台主机.或者其他一些设计.

有任何想法吗?

UPD:

所以看起来有使用LogAdapter的方法.但如何使用它:

loggerCent = logging.getLogger(prodName + 'Remote')
ce = logging.handlers.SysLogHandler(address=('192.168.1.11', 514), facility='daemon')
logging.basicConfig(level=logging.DEBUG,
                        format='%(asctime)-15s %(name)-5s %(levelname)-8s host: %(host)-15s %(message)s')
loggerCent.addHandler(ce)
loggerCent2 = logging.LoggerAdapter(loggerCent,
                               {'host': '123.231.231.123'})
loggerCent2.warning('TEST MSG')
Run Code Online (Sandbox Code Playgroud)

通过TcpDump查找消息我在LoggerAdapter中看不到任何关于主机的信息我做错了什么?

UPD2:

好吧,我找不到将主机发送到syslog-ng的方法.虽然可以在链中发送第一个主机,但我真的找不到通过Python Logging发送它的方法.

无论如何,我在syslog-ng: CSV Parser中创建了解析器

parser ipmimon_log {
        csv-parser(
    columns("LEVEL", "UNIT", "MESSAGE")
    flags(escape-double-char,strip-whitespace)
        delimiters(";")
        quote-pairs('""[](){}')
    );
};

log {
    source(s_net); …
Run Code Online (Sandbox Code Playgroud)

python logging syslog-ng

6
推荐指数
1
解决办法
5447
查看次数

Syslog-ng日志模板\\ 011字符

我有syslog-ng的问题.我想让syslog-ng格式化日志,如下所示:

template("$YEAR-$MONTH-$DAY\\011$HOUR:$MIN:$SEC\\011$HOST\\011$MSGHDR$MSGONLY\n")
Run Code Online (Sandbox Code Playgroud)

但它没有"\"记录.只是"011".例:

预计:2012-11-28 \\ 01116:33:51 \\ 011host_name \\ 011app_name [26250]:消息

发生时间:2012-11-2801116:33:51011host_name011app_name [26250]:消息

怎么做到这一点?有任何想法吗?:) 提前致谢 ;)

syslog-ng

5
推荐指数
1
解决办法
666
查看次数

使用 Apache Kafka 进行日志聚合

我正在从他们的快速入门教程中学习 Apache Kafka:http : //kafka.apache.org/documentation.html#quickstart。到目前为止,我已经完成了如下设置。一个生产者节点,其中一个 web 服务器运行在 8888 端口。另一个节点上的 Kafka 服务器(代理)、消费者和 Zookeeper 实例。我已经测试了具有 3 个分区的默认启用控制台/文件的生产者和消费者。设置是完美的,我能够看到我按照他们创建的顺序发送的消息(在每个分区中)。

现在,我想将从 Web 服务器生成的日志发送到 Kafka Broker。这些消息稍后将由消费者处理。目前我正在使用 syslog-ng 将服务器日志捕获到文本文件中。关于如何实现生产者以使用 kafka 进行日志聚合,我提出了 3 个粗略的想法

生产者实现

第一类: 监听 syslog-ng 的 tcp 端口。获取每条消息并发送到 kafka 服务器。这里我们有两个中间进程:Producer 和 syslog-ng
第二类:使用 syslog-ng 作为 Producer。应该找到一种方法将消息发送到 Kafka 服务器而不是写入文件。syslog-ng,生产者是中间进程。
第三类:将网络服务器本身配置为生产者。

我的想法是否正确。在最后一种情况下,我们没有任何中间过程。但我怀疑它的实现会影响服务器性能。任何人都可以让我知道使用 Apache Kafka 的最佳方式(如果以上 3 种不好)并指导我完成服务器的适当配置吗?...

PS:我在我的网络服务器上使用 node.js

谢谢,
萨拉

webserver syslog-ng node.js apache-kafka

5
推荐指数
1
解决办法
9385
查看次数

docker 日志记录到系统日志的严重性级别

我有一个syslog-ng容器,它从运行在同一应用程序上的其他容器收集日志,并且正常日志记录按预期工作:每个容器发送其日志,syslog-ng 将它们保存在单独的文件中,如syslog-ng.conf.

我也在尝试将错误日志保存在不同的文件中。我假设从另一个容器内抛出到 STDERR 的所有内容都应该被 syslog-ng 视为错误,所以当我启动这样的容器时:

docker run -dit --log-driver syslog --log-opt syslog-address=tcp://my_syslog:601 alpine echo "boom" > /dev/stderr
Run Code Online (Sandbox Code Playgroud)

然后我希望 syslog-ng 将其理解为错误,但事实并非如此。

这是我syslog-ng.conf在 syslog-ng 容器中的摘录:

@version: 3.25
source s_net {
  network(transport(tcp) port(601));
  network(transport(udp) port(514));
};
destination d_error_file {
  file("/tmp/errors");
};
filter f_errors {
  level(err .. emerg);
};
log {
  source(s_net);
  filter(f_errors);
  destination(d_error_file);
};
Run Code Online (Sandbox Code Playgroud)

如何告诉 syslog-ng 将 STDERR 消息视为错误?

logging syslog-ng docker

5
推荐指数
1
解决办法
605
查看次数

syslog-ng 多个目的地

我们正在使用syslog-ng通过 将访问日志文件发送到远程服务器tcp。而且我已经知道可以配置多个目的地来完成这项工作,就像:

source s_xxx { file("/xxx/access.log"); };
destination d_one {tcp("1.2.3.4", port(1234));};  
destination d_two {tcp("1.2.3.5", port(1234));};
log {source(s_xxx); destination(d_one); destination(d_two);};
Run Code Online (Sandbox Code Playgroud)

我要弄清楚的是如何将我的内容轮询到这两个目的地(例如循环)。换句话说,我的内容要么发送到d_one要么d_two,而不是两者都发送。

非常感谢。

linux syslog-ng

4
推荐指数
1
解决办法
1万
查看次数

Syslog-ng连接到mysql

我想将文件从交换机记录到mysql数据库。我正在使用syslog-ng并且在配置文件中,我做了以下修改

filter f_no_debug { not level(debug); };

destination d_mysql {
sql(
type(mysql)
username("logs")
password("SECUREPASSWORD")
database("logs")
host("localhost")
table("logs")
columns("host", "facility", "priority", "level", "tag", "datetime", "program", "msg")
values("$HOST", "$FACILITY", "$PRIORITY", "$LEVEL", "$TAG","$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC","$PROGRAM", "$MSG")
indexes("datetime", "host", "program", "pid", "message")
);
};

log {source(s_net); source(s_src); filter(f_no_debug); destination(d_mysql); }
Run Code Online (Sandbox Code Playgroud)

当我运行命令时service syslog restart,出现以下错误

无法初始化数据库访问(DBI); rc ='-1',错误='没有这样的文件或目录(2)'初始化dest驱动程序时出错; dest ='d_mysql',id ='d_mysql'#0初始化消息管道时出错

我如何克服此问题以使日志定向到数据库?

mysql syslog-ng

3
推荐指数
2
解决办法
4683
查看次数

如何让syslog在docker中可行?

我的应用程序将发送syslog local0消息.当我将我的应用程序移动到docker时,我发现很难显示syslog.

我试图将docker作为--log-dirver作为syslog或journald运行,两者都很奇怪,当我尝试在里面运行这个命令时,/ var/log/local0.log显示docker容器的控制台输出而不是我的应用程序的syslog容器

logger -p local0.info -t a message
Run Code Online (Sandbox Code Playgroud)

所以,我尝试在docker容器中安装syslog-ng.外部docker框是Arch Linux(内核4.14.8 + systemctl).docker容器作为CentOS 6运行.如果我在容器内安装syslog-ng并启动它,它会显示以下消息.

# yum install -y syslog-ng  # this will install syslog-ng 3.2.5
# /etc/init.d/syslog-ng start
Plugin module not found in 'module-path'; module-path='/lib64/syslog-ng', module='afsql'
Starting syslog-ng: Plugin module not found in 'module-path'; module-path='/lib64/syslog-ng', module='afsql'
Error opening file for reading; filename='/proc/kmsg', error='Operation not permitted (1)'
Error initializing source driver; source='s_sys', id='s_sys#0'
Error initializing message pipeline;
Run Code Online (Sandbox Code Playgroud)

syslog-ng docker

2
推荐指数
2
解决办法
2392
查看次数

Python日志记录:禁用输出到stdout

我正在尝试使程序仅使用SysLogHandler实例进行日志记录而不使用其他处理程序.我希望它不会记录到任何文件或stdout.

    self.logger = logging.getLogger(self.name)

    syslog_handler = logging.handlers.SysLogHandler(
        socktype=socket.AF_UNIX,
        address='/dev/log',
        facility=logging.handlers.SysLogHandler.LOG_LOCAL4,
    )

    # Check if there is a handler attached
    if len(self.logger.handlers) > 0:

        # If there is a handler attached
        # ensure it is a SysLogHandler instance

        handler = self.logger.handlers[0]
        if not (handler.__class__ == logging.handlers.SysLogHandler):
            # If is was something else but a SysLogHandler instance,
            # remove it and attach the syslog_handler

            self.logger.handlers = []
            self.logger.addHandler(syslog_handler)
    else:
        # If no handlers attached,
        # attach syslog_handler

        self.logger.handlers = []
        self.logger.addHandler(syslog_handler)
Run Code Online (Sandbox Code Playgroud)

但是通过这种设置,它继续在运行时将线路吐出到标准输出 …

python logging syslog syslog-ng python-3.x

1
推荐指数
1
解决办法
4059
查看次数