跳转到主要内容

OpenStack日志合并工具

项目描述

os-log-merger

https://img.shields.io/pypi/v/os-log-merger.svg https://img.shields.io/pypi/pyversions/os-log-merger.svg https://img.shields.io/:license-apache-blue.svg

什么是os-log-merger?

os-log-merger代表OpenStack LOG合并器,它是一个工具,旨在从不同项目合并多个OpenStack日志,并将它们合并到一个文件中,按时间条目排序。

只要日志基于oslo logger输出,它就应该能正常工作。

快速介绍: http://mangelajo.github.io/openstack-debugging-presentation/

局限性

如果您的服务器没有与公共时间源同步时间,则此工具无法正确(或有意义地)合并日志。

如何安装

pip install os-log-merger

基本用法

$ os-log-merger ../bz/1257567/40-os1ctrl01/var/log/neutron/server.log:NS1 \
                ../bz/1257567/50-os1ctrl02/var/log/neutron/server.log:NS2 \
                ../bz/1257567/40-os1ctrl01/var/log/neutron/openvswitch-agent.log:OVS1 \
                ../bz/1257567/50-os1ctrl02/var/log/neutron/openvswitch-agent.log:OVS2

请注意,:NS1、:NS2、:OVS1、:OVS2 是别名,可以省略。在这种情况下,用于将日志文件与日志行关联的额外列将使用原始文件路径而不是[ALIAS]。

上一个例子将产生类似以下内容

2015-08-25 09:37:15.463 [NS1] 15062 DEBUG neutron.context [req-b751a750-f5d8-4b6e-9af3-82d143ef9416 None] Arguments dropped when creating context: {u'project_name': None, u'tenant': None} __init__ /usr/lib/python2.7/site-packages/neutron/context.py:83
2015-08-25 09:37:15.463 [NS1] 15062 DEBUG neutron.plugins.ml2.db [req-b751a750-f5d8-4b6e-9af3-82d143ef9416 None] get_ports_and_sgs() called for port_ids [u'4136d577-e02f-47c1-b543-f0bfd65ef85e', u'5d5ea109-4807-4df3-bef4-b5d89c3ffebc', u'6adcffbf-09d5-4a85-9339-9d6beb2bf82c', u'6b4d7b51-c87d-483e-9606-0e2a54ad8184', u'743ccaa6-7ed9-4195-aabd-3d55006338e1', u'dc662767-61a5-4807-b2ed-a7c76b541fd6', u'4decdd33-6f13-46df-b2f0-d9ff99878514', u'34b826df-9787-443c-9bef-084374827a85', u'7bbc404b-3df7-498a-b6fb-e81f9370a19f', u'c12e6e06-ff6a-44dc-b75f-78ec55dd3dd3', u'586cd86d-59d0-434b-ab27-76975ce5abc4', u'79b33879-3232-4b3a-a27c-c0a79da10379', u'ba6a28cc-9851-4cd7-acae-40034a19c761', u'05c4115a-da58-41db-b3f7-7326e1a22971'] get_ports_and_sgs /usr/lib/python2.7/site-packages/neutron/plugins/ml2/db.py:224
2015-08-25 09:37:15.463 [OVS1] 12613 DEBUG neutron.agent.linux.utils [req-588c942a-6526-464f-a447-782a5e2d436a None]
                                    Command: ['sudo', 'neutron-rootwrap', '/etc/neutron/rootwrap.conf', 'ovs-vsctl', '--timeout=10', 'list-ports', 'br-int']
                                    Exit code: 0
                                    Stdout: 'ha-2cdba01d-e4\nha-44dca3a9-44\nha-499d3db7-97\nha-55a19f5e-ef\nha-b2d04f15-f2\nha-b5b271a1-d8\nha-fa58d644-81\nint-br-enp7s0\nint-br-ex\nqr-34b826df-97\nqr-5d5ea109-48\nqr-6adcffbf-09\nqr-743ccaa6-7e\nqr-79b33879-32\nqr-c12e6e06-ff\nqr-dc662767-61\n'

支持引用 http url 文件而不是本地文件。文件将在本地缓存,以避免在下次运行时重新下载。

公共基础

在许多情况下,我们会有一个共同的基目录,日志文件都位于其中,并且它们可能共享 .log 扩展名。因此,为了简洁,os-log-merger 允许使用 -b-p 选项(–log-base–log-postfix 长选项)设置所有文件的基目录和后缀。

Cinder 示例

$ os-log-merger -b /var/log/cinder/ -p .log api:api scheduler:sch volume:vol

/var/log/messages

os-log-merger 还支持使用 -ml–msg-logs 选项的 /var/log/messages 类型的文件。

由于这些文件的格式缺少年份信息 -MAR 24 14:11:19- 因此将使用最后修改文件的年份。

这些文件也可以使用 glob 来指定,并且它们也支持别名定义。

请注意,在 -ml 选项文件之前应该列出 openstack 文件。

Cinder 示例

$ os-log-merger -b /var/log/ cinder/api.log:API -ml messages:MSG *.log

带时间戳的日志

os-log-merger 还支持带时间戳的 -[ 0.003036]- 使用 -tl–timestamp-logs 选项。

由于时间戳多次不会使用纪元时间作为时间戳的来源,而是使用系统启动时间,因此初始日期和时间将通过从文件修改日期时间中减去文件中的最后一个时间戳来计算。

这些文件也可以使用 glob 来指定,并且它们也支持别名定义。

请注意,在 -tl 选项文件之前应该列出 openstack 文件。

Cinder 示例

$ os-log-merger -b /var/log/ cinder/api.log:API -tl dmesg:DMSG

自动别名

如上所述,您可以使用 :ALIAS 在每个日志文件后轻松设置别名,但由于大多数日志文件名和位置都是众所周知的,os-log-merger 具有不同级别的自动别名功能,以适应您的特定需求。

如果命令行中已定义别名,则将禁用该文件的自动别名。

级别 0

最基础的自动别名生成级别是级别 0,如上所述是默认行为,其中文件路径用作别名。

级别 1

由于默认配置将创建相当长的别名,因此当使用基目录和日志后缀选项时,可以使用级别 1 从别名中删除它们。

然后以下命令行

$ os-log-merger -a1 -b /var/log/cinder/ -p .log api scheduler volume

将使用 apischedulervolume 别名

2016-02-01 12:11:17.573 [api] ...
2016-02-01 12:11:17.701 [scheduler] ...
2016-02-01 11:11:18.667 [volume] ...

级别 2

在某些情况下,我们可能希望使用 globbing 模式,而自动别名级别 1 已不再有用,因此我们希望从别名中删除文件扩展名以及常见路径并减少众所周知的日志文件名。

在级别 2 中,os-log-merger 将删除路径中的所有常见部分,只要结果路径仍然可以唯一识别前缀路径内的文件。

它还将重命名众所周知的文件,例如 cinder/scheduler.log,将其重命名为 c-sch,如以下示例所示

$ os-log-merger -a2 node?/var/log/{cinder,nova}/*.log

这将给出

2016-02-01 10:23:34.680 [node1/C-API] ...
2016-02-01 10:24:34.690 [node1/C-SCH] ...
2016-02-01 10:25:34.700 [node1/C-VOL] ...
2016-02-01 10:26:34.710 [node1/N-API] ...
2016-02-01 10:27:34.680 [node2/N-CPU] ...

级别 3

根据您日志路径中非公共目录的名称,您可能希望进一步减少它们而不是保留它们未更改。

用以下命令行替换先前命令中的 Level 2 自动别名生成,使用相同的文件

$ os-log-merger -a3 node?/var/log/{cinder,nova}/*.log

将导致

2016-02-01 10:23:34.680 [1/C-API] ...
2016-02-01 10:24:34.690 [1/C-SCH] ...
2016-02-01 10:25:34.700 [1/C-VOL] ...
2016-02-01 10:26:34.710 [1/N-API] ...
2016-02-01 10:27:34.680 [2/N-CPU] ...

系统探测

提供了一组系统探测工具,以帮助调试常见问题。

netprobe

在探测目录下可以找到 netprobe.py,此工具依赖于主机上可用的 tcpdump。

此探头将定期检查系统中的新UP网络设备,并在找到时,将启动一个带有配置过滤器的tcpdump,以OpenStack日志格式记录所有内容。

默认情况下,网络命名空间不会被过滤。

网络接口的默认过滤器是

tap.*|qbr.*|qg-\.*|qr-\.*

默认的数据包过滤器是

(arp or rarp) or (udp and (port 67 or port 68)) or icmp or icmp6

使用说明

usage: netprobe [-h] [-v] [--netns-re NETNS_REGEX] [--netdev-re NETDEV_REGEX]
                [--tcpdump-filter TCPDUMP_FILTER]
                [--check-interval CHECK_INTERVAL]

This tool will track system network devices as they appear in a host,
and start tcpdump processes for each of them, while the output of all
the tcpdumps goes in a single openstack-like log.

optional arguments:
  -h, --help            show this help message and exit
  -v, --version         show program's version number and exit
  --netns-re NETNS_REGEX, -n NETNS_REGEX
  --netdev-re NETDEV_REGEX, -d NETDEV_REGEX
  --tcpdump-filter TCPDUMP_FILTER, -t TCPDUMP_FILTER
  --check-interval CHECK_INTERVAL, -i CHECK_INTERVAL
                        The interval between interface checks
  --output-file OUTPUT_FILE, -o OUTPUT_FILE

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。

源分布

os-log-merger-1.2.1.tar.gz (38.3 MB 查看哈希值)

上传日期

构建分布

os_log_merger-1.2.1-py2.py3-none-any.whl (23.0 kB 查看哈希值)

上传日期 Python 2 Python 3

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误记录StatusPageStatusPage状态页面