3

使用命令:

/usr/bin/journalctl -o 短 -f | ncat {some-ip} {一些端口}

将日志输出转发到一些远程日志跟踪应用程序。

问题是我在打印输出中丢失了 systemd 单元/服务名称,因此很难判断哪个服务产生了哪个日志行。

例如这是一个 nginx 行:

6 月 25 日 07:51:09 localhost 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, like Gecko) Chrome/35.0.1916.153 Safari/537.36"

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

4

4 回答 4

1

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

尝试-o json-o verbose

于 2014-08-04T01:35:42.637 回答
1

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 上的蟒蛇)

于 2015-06-01T07:51:32.903 回答
0

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

每个服务/系统单元都有一个后执行脚本,它使用:

/usr/bin/journalctl -u {单位名称} -o short -f | sed 's/^/{单位名称}/' | ncat {some-ip} {一些端口}

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

例子

journalctl -u mongodb.service -o 短 -f | sed 's/^/ mongodb.service /' | ncat {some-ip} {一些端口}

将输出:

mongodb Jun 26 09:11:35 localhost bash[1710]: 2014-06-26T09:11:35.714+0000 [rsHealthPoll] replset info mongodb-0:27017 heartbeat failed, retrying

于 2014-06-26T09:14:37.033 回答
0

而不是_SYSTEMD_UNIT字段使用容器名称。

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

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

码头工人组成:

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"

日记本:

sudo journalctl -b -o short --all -f COM_DOCKER_STACK_NAMESPACE=skynet 

码头工人命令:

docker stack deploy -c docker-compose.dev.yml skynet

将输出:skynet_mongo.1.ins4s13luwiekrri3m5a8vwwl

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}} <docker-id>

可用标签使用:自定义日志驱动程序输出

配置 journald 日志驱动程序:Docker Journald 日志记录驱动程序

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

于 2018-04-24T13:09:43.477 回答