Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging Journalctl:将_SYSTEMD_UNIT字段添加到日志打印输出中_Logging_Docker_Systemd_Journal_Coreos - Fatal编程技术网

Logging Journalctl:将_SYSTEMD_UNIT字段添加到日志打印输出中

Logging Journalctl:将_SYSTEMD_UNIT字段添加到日志打印输出中,logging,docker,systemd,journal,coreos,Logging,Docker,Systemd,Journal,Coreos,使用命令: /usr/bin/journalctl-o short-f | ncat{some ip}{some port} 将日志输出转发到某个远程日志跟踪应用程序 问题是,我在打印输出中缺少systemd单元/服务名称,因此很难区分哪个服务生成哪个日志行 例如,这是一个nginx行: 6月25日07:51:09本地主机bash[497]:10.23.132.98-- [25/Jun/2014:07:51:09+0000]“GET/page.html HTTP/1.1”200 321 “htt

使用命令:

/usr/bin/journalctl-o short-f | ncat{some ip}{some port}

将日志输出转发到某个远程日志跟踪应用程序

问题是,我在打印输出中缺少systemd单元/服务名称,因此很难区分哪个服务生成哪个日志行

例如,这是一个nginx行:

6月25日07:51:09本地主机bash[497]:10.23.132.98-- [25/Jun/2014:07:51:09+0000]“GET/page.html HTTP/1.1”200 321 “https://{ip}”Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.36 (KHTML,像壁虎)铬/35.0.1916.153狩猎/537.36“


日志中有bash[497]——进程的PID。如何向日志中添加更多数据?例如,此PID的docker容器名称或systemd服务/单元名称?

最终,我以不同的方式实现了这一点

每个服务/systemd单元都有一个执行后脚本,该脚本使用:

/usr/bin/journalctl-u{unit name}-o short-f | sed's/^/{unit name}/'| ncat{some ip} {某个端口}

现在我在日志行的开头有了单位名称!我的日志收集器在消息中有单元名称

范例

journalctl-umongodb.service-o short-f|sed的/^/mongodb.service /|ncat{some ip}{some port}

将输出:

mongodbJun 26 09:11:35本地主机bash[1710]: 2014-06-26T09:11:35.714+0000[rsHealthPoll]回复集信息 mongodb-0:27017检测信号失败,正在重试


不要使用
-o short
,它会删除信息

尝试
-o json
-o verbose
Python可以做到这一点:

from systemd import journal

j = journal.Reader()
j.this_boot()
j.add_match(_SYSTEMD_UNIT="newnginx.service")
for entry in j:
   print('{} {}'.format(entry['_SYSTEMD_UNIT'], entry['MESSAGE']))

(CentOS 7上的python)

使用容器名称,而不是
\u SYSTEMD\u UNIT
字段

我在这里登陆是因为
docker-stack/swarm
缺少
docker-compose-logs
功能来记录单个节点上的所有服务

使用Docker Server版本18.03.0-ce和Docker compose版本3.6,可以将所有日志发送到journald并按服务名称记录。为了识别每个容器,请使用图像名称标记它们。请参阅docker-compose.dev.yml的日志部分

Docker Compose:

version: '3.6'
networks:
    skynet:
    driver: overlay
services:
    mongo:
        image: mongo:3
        networks:
            - skynet
        volumes:
            - /data/mongodb:/data/db
        logging:
            driver: "journald"
            options:
                tag: "{{.Name}}"
                labels: "com.docker.stack.namespace"
journalctl:

sudo journalctl -b -o short --all -f COM_DOCKER_STACK_NAMESPACE=skynet 
Docker命令:

docker stack deploy -c docker-compose.dev.yml skynet
将输出:skynet_mongo.1.ins4s13Luwiekri3M5A8VWWL

Apr 24 14:23:08 c-wrk skynet_mongo.1.ins4s13luwiekrri3m5a8vwwl[19410]: 2018-04-24T12:23:08.212+0000 I NETWORK  [listener] connection accepted from 10.0.0.10:36518 #3 (3 connections now open)
使用完整注释:

要查看可用标签,请使用:
docker inspect-f{{{.Config.labels}

可用标记使用:

配置日志日志驱动程序:


将日志输出着色:使用journalctl | ccze-A

大多数日志软件可以接受多种格式。但是试着用冗长的语言。否则,您可以通过一些其他程序将其格式化为您的软件支持的格式。