首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >问: journalctl用自己的元数据作为消息的前缀?

问: journalctl用自己的元数据作为消息的前缀?
EN

Server Fault用户
提问于 2017-04-28 19:02:13
回答 1查看 939关注 0票数 0

如何在日志消息中使用元数据前缀journald日志条目?

我想我可能需要查看其中一个冗长的输出,过滤掉换行符和所有额外的信息,找到我正在寻找的项目(DateTime,Docker CONTAINER_NAME,Message),而忽略剩下的全部放在一行上。

awk这样的东西可以用来剥离断线,只抓取X、Y、Z线,并将它们显示在单行上吗?那么args如何知道将每条X,Y,Z线分组呢?我是说,args怎么知道每一个“分组”?

更多信息如下。

以下是我登录到日志的两个不同码头集装箱的两行代码:

代码语言:javascript
复制
Apr 28 18:09:43 rschool dockerd[1366]: [pid: 9|app: 0|req: 1/1] 68.180.230.53 () {48 vars in 934 bytes} [Fri Apr 28 14:09:42 2017] GET /enrollment/info-sessions/ => generated 17175 bytes in 1072 msecs (HTTP/1.0 200) 3 headers in 112 bytes (1 switches on core 0)
Apr 28 18:09:43 rschool dockerd[1366]: 68.180.230.53 - - [28/Apr/2017:18:09:43 +0000] "GET /enrollment/info-sessions/ HTTP/1.1" 200 3495 "-" "Mozilla/5.0 (Macintosh; IntelMac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36" "-"

如您所见,您无法判断哪个日志条目属于哪个码头容器。

查看完整日志消息时有可用的元数据。下面是用journald -o verbose查看的其中一条消息:

代码语言:javascript
复制
_UID=0
_GID=0
_SYSTEMD_SLICE=system.slice
_BOOT_ID=f4a6e9569f0349d1817bd92ab779ebe3
_MACHINE_ID=a62f158e48fc45eeb32afaef98d24d5b
_HOSTNAME=rschool
_TRANSPORT=journal
_CAP_EFFECTIVE=3fffffffff
_PID=1366
_COMM=dockerd
_EXE=/usr/bin/dockerd
_CMDLINE=/usr/bin/dockerd -H fd://
_SYSTEMD_CGROUP=/system.slice/docker.service
_SYSTEMD_UNIT=docker.service
CONTAINER_NAME=rschool_web_1
CONTAINER_ID=732e5bf0d0a1
CONTAINER_ID_FULL=732e5bf0d0a1cc110cacce68850143aa3534
CONTAINER_TAG=rschool_web/rschool_web_1/732e5bf0d0a1
MESSAGE=[pid: 9|app: 0|req: 1/1] 68.180.230.53 () {48 vars in 934 bytes} [Fri Apr 28 14:09:42 2017] GET /enrollment/info-sessions/ => generated 17175 bytes in 1072 msecs (HTTP/1.0 200) 3 headers in 112 bytes (1 switches on core 0)
_SOURCE_REALTIME_TIMESTAMP=1493402983899475
Fri 2017-04-28 18:09:43.901030 UTC [s=9d2777df7c3e4658a6d3d2c7896376ce;i=13ca;b=f4a6e9569f0349d1817bd92ab779ebe3;m=c91fe4d38;t=54e3dfa5ca862;x=f8ee400046f7d86f]
PRIORITY=6

但是,日记似乎没有任何划线性质与-o verbose

作为使用日志的Docker日志驱动程序的一部分,它添加了类似于CONTAINER_NAME的内容--这正是我所要寻找的。

如何使用类似于CONTAINER_NAME的格式显示-o short

EN

回答 1

Server Fault用户

回答已采纳

发布于 2017-04-28 19:02:13

好的,我在打字的时候找到了答案。不过是很长的风。所以bash别名会有所帮助(见结尾)。把它变成一个"Wiki的答案“,因为我花了很长时间打字,并找到答案。也许有一天它能帮到别人。

-o json提供了JSON输出格式。

我们可以使用jq从json中挑选东西,格式化并连接它们,并将它们显示在单个上。

代码语言:javascript
复制
journalctl -f -n 100 -o json | jq -r '.__REALTIME_TIMESTAMP + " " + .PRIORITY + " " + ._HOSTNAME + " " + ._SYSTEMD_UNIT + " " + .CONTAINER_TAG + " " + .MESSAGE'

我使用docker tag选项来指定自定义标记。例如,我的docker-compose.production.yml覆盖看起来如下:

代码语言:javascript
复制
version: '2'
services:
    nginx:
        restart: always
        ports:
            - "80:80"
            - "443:443"
        logging:
            driver: journald
            options:
                tag: "{{.ImageName}}/{{.Name}}/{{.ID}}"

这给了我一条线,就像:

代码语言:javascript
复制
1493405629162557 6 rschool docker.service nginx:1.12.0-alpine/rschool_nginx_1/0f6b8d772957 X.X.X.X - - [28/Apr/2017:18:53:49 +0000] "GET / HTTP/1.1" 200 4399 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36" "-"

这正是我想要的。这也与所有其他日记条目兼容:

代码语言:javascript
复制
1493405535267844 4 rschool   [UFW BLOCK] IN=eth0 OUT= MAC=9e:51:e1...:08:00 SRC=X.X.X.X DST=X.X.X.X LEN=439 TOS=0x00 PREC=0x00 TTL=57 ID=41599 DF PROTO=UDP SPT=5273 DPT=5060 LEN=419 

如果不使用docker日志标记,则只需使用CONTAINER_NAME:

代码语言:javascript
复制
journalctl -f -n 100 -o json | jq -r '.__REALTIME_TIMESTAMP + " " + .PRIORITY + " " + ._HOSTNAME + " " + ._SYSTEMD_UNIT + " " + .CONTAINER_NAME + " " + .MESSAGE'

这应该适用于所有的Docker容器,而不管linux系统日志记录到日志。

剩下的就是把它变成一个bash别名,以便快速引用。将其添加到您的~/.bash_aliasessource ~/.bash_aliases中:

代码语言:javascript
复制
alias journalctlf="journalctl -f -n 100 -o json | jq -r '.__REALTIME_TIMESTAMP + \" \" + .PRIORITY + \" \" + ._HOSTNAME + \" \" + ._SYSTEMD_UNIT + \" \" + .CONTAINER_NAME + \" \" + .MESSAGE'"

( "f“表示格式化)

然后,您可以直接运行journalctld,并在jorunald的荣耀中享受码头容器名称。

票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/847238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档