使用命令:
/ usr / bin / journalctl -o short -f | ncat {some-ip} {some port}
将日记输出转发到某个远程日志跟踪应用程序。
问题是我在打印输出中缺少systemd单元/服务名称,因此很难判断哪个服务生成了哪个日志行。
例如这是一个nginx行:
Jun 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,像Gecko一样)Chrome / 35.0.1916.153 Safari / 537.36"
在日志中有 bash [497] - 进程的PID。如何在日志中添加更多数据?例如,此PID的docker容器名称还是systemd服务/单元名称?
答案 0 :(得分:1)
不要使用-o short
,它会删除信息!
尝试-o json
或-o verbose
答案 1 :(得分: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上的python)
答案 2 :(得分:0)
最后我以不同的方式实现了这个
每个service / systemd单元都有一个后执行脚本,使用:
/ usr / bin / journalctl -u {unit name} -o short -f | sed's / ^ / {unit name} /'| ncat {some-ip} {some port}
现在我在日志行的开头有单位名称!我的日志收集器在消息中有单元名称!
示例
journalctl -u mongodb.service -o short -f | sed's / ^ / mongodb.service /'| ncat {some-ip} {some port}
将输出:
mongodb Jun 26 09:11:35 localhost bash [1710]: 2014-06-26T09:11:35.714 + 0000 [rsHealthPoll] replset info mongodb-0:27017心跳失败,正在重试
答案 3 :(得分:0)
而不是_SYSTEMD_UNIT
字段使用容器名称。
我在这里登陆是因为docker stack/swarm
缺少docker-compose logs
功能来记录单个节点上的所有服务。
使用Docker Server版本:18.03.0-ce和docker编写版本3.6,可以将所有日志发送到journald并按服务名称记录它们。为了识别每个容器,用图像名称标记它们。请参阅docker-compose.dev.yml的日志记录部分
Docker撰写:
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 Command:
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>
可用标签使用:Customize log driver output
配置日记日志驱动程序:Docker Journald logging driver
着色日志输出:使用journalctl | ccze -A