如果您对docker集群集中查看服务日志感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于docker集群集中查看服务日志的详细内容,我们还将为您解答docker查看服务的相关
如果您对docker集群集中查看服务日志感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于docker集群集中查看服务日志的详细内容,我们还将为您解答docker 查看服务的相关问题,并且为您提供关于Centos7 docker+zookeeper集群构建、docker history 查看docker镜像构建过程 还原dockerfile 查看启动参数、docker logs 查看 docker 容器日志详解、docker logs 查看docker容器日志的有价值信息。
本文目录一览:- docker集群集中查看服务日志(docker 查看服务)
- Centos7 docker+zookeeper集群构建
- docker history 查看docker镜像构建过程 还原dockerfile 查看启动参数
- docker logs 查看 docker 容器日志详解
- docker logs 查看docker容器日志
docker集群集中查看服务日志(docker 查看服务)
1.为什么需要集中查看服务日志
当服务出现错误的时候,需要到服务器上查看错误的日志,而服务器上的服务会运行多个实例。这样就需要登录到每个实例的容器中查看相应的日志,而且如果不是程序服务出的问题,还需要到每个数据库的实例容器中查看日志,这样做会比较繁琐。
2.集中查看服务日志的组件
有一组组件是ELK组件,可以配合实现集中查看服务日志。E指的是Elasticsearch,他是一个很好的实时存储数据并且高效查询数据的数据库,主要用他存储集群服务中产生的日志并且能够实时查询;L指的是Logstash,允许我们中心化处理数据,可以对数据进行各种格式化处理;K指的是Kibana,可以与Elasticsearch相结合,能进行图形化的日志查看、搜索等。
3.在docker集群中搭建ELK
3.1 搭建elasticsearch的服务
docker service create \
--name elasticsearch \
--network elk \
-p 9200:9200 \
--reserve-memory 500m \
elasticsearch:2.4
3.2 搭建logstash的服务
先建立一个简单的logstash服务的配置文件,logstash.conf(主要是让logstash监听在51415端口,把日志输出到elasticsearch中):
input {
syslog { port => 51415 }
}
output {
elasticsearch {
hosts => ["elasticsearch:9200"]
}
}
以及建立logstash服务:
docker service create --name logstash \
--mount "type=bind,source=$PWD/docker/logstash,target=/conf" \
--network elk \
-e LOGSPOUT=ignore \
--reserve-memory 100m \
logstash:2.4 logstash -f /conf/logstash.conf
但是有个问题如何让其他服务日志输出到logstash呢,可以通过logspout的服务,将其他服务的日志输出到logstash中。logspout需要其他服务在stdout上输出日志才能将日志重定向,这就需要你的其他服务通过重定向文件输出到stdout的方式来实现输出日志到stdout,logsout搭建如下:
docker service create --name logspout \
--network elk \
--mode global \
--mount "type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock" \
-e SYSLOG_FORMAT=rfc3164 \
gliderlabs/logspout syslog://logstash:51415
logsout的工作原理是,他在每台节点启动 ,所以--mode global;通过docker的socket来获取每个服务中日志的输出,然后将日志内容重定向到logstash服务
3.3基于之前的swarm listener搭建kibana
docker service create --name kibana \
--network elk \
--network proxy \
-e ELASTICSEARCH_URL=http://elasticsearch:9200 \
--reserve-memory 50m \
--label com.df.notify=true \
--label com.df.distribute=true \
--label com.df.servicePath=/app/kibana,/bundles,/elasticsearch \
--label com.df.port=5601 \
kibana:4.6
搭建的kibana可以通过三种url方式打开/app/kibana、/bundles、/elasticsearch
Centos7 docker+zookeeper集群构建
一.前言
请准备多台Centos7系统,及其zookeeper离线包。我这边主要用三台进行讲解。
二. Zookeeper 安装
1.拉取zookeeper镜像
docker pull registry.docker-cn.com/library/zookeeper:3.6.1
2.用于挂载zookeeper数据文件
mkdir -p /home/zookeeper/data
3.用于挂载zookeeper配置文件
mkdir -p /home/zookeeper/conf
4.vi /home/zookeeper/conf/zoo.cfg
#zoo.cfg的内容
tickTime=2000
initLimit=10
synclimit=5
dataDir=/data
dataLogDir=/logs
clientPort=2181
server.0=192.168.153.133:2888:3888
server.1=192.168.153.137:2888:3888
server.2=192.168.153.138:2888:3888
5.每台机器zookeeper/data 创建myid文件,一一对应server0,1,2 序号
6.用于挂载zookeeper日志文件
mkdir -p /home/zookeeper/logs
7.启动命令
docker run --privileged=true --network host --name zookeeper -p 2181:2181 -v /home/zookeeper/data:/data -v /home/zookeeper/conf/zoo.cfg:/conf/zoo.cfg -v /home/zookeeper/logs:/logs -d zookeeper
命令说明
(1)--network host: 使用主机上的网络配置,如果不用这种模式,而用默认的bridge模式,会导致容器跨主机间通信失败
(2)-v /usr/local/zookeeper/data:/data:主机的数据目录挂载到容器/data下
(3)-v /usr/local/zookeeper/conf:/conf: 主机的配置目录挂载到容器的/conf下,容器内的zkServer.sh默认会读取/conf/zoo.cfg下的配置
二. 注意事项
- Invalid config, exiting abnormally错误,请检查zoo.cfg集群是否存在bug
- zookepeer集群启动报错,unable to run quorum server。
在配置文件/home/zookeeper/conf/zoo.cfg ,找到下面两个配置的值
dataDir=/data
dataLogDir=/data/logs
删除下面两个目录的version-2:
删除下面两个目录的version-2:
然后重新启动即可
- 集群个数一般为奇数。
- 集群启动成功需满足(过半原则): 已启动个数(未成功)> 总集群个数(N)/ 2 。然后做集群的一个个启动,一开始启动并未成功,监听等待其他启动,达到条件之后,集群启动成功。
docker history 查看docker镜像构建过程 还原dockerfile 查看启动参数
介绍:
~]# docker history --help
Usage: docker history [OPTIONS] IMAGE
Show the history of an image
Options:
--format string Pretty-print images using a Go template
--help Print usage
-H,--human Print sizes and dates in human readable format (default true)
--no-trunc Don't truncate output
-q,--quiet Only show numeric IDs
示例:
~]# docker history kubeguide/tomcat-app:v1
IMAGE CREATED CREATED BY SIZE COMMENT
a29e200a18e9 2 years ago /bin/sh -c #(nop) ADD dir:c5c3bddef49cbc9f... 992kB
<missing> 2 years ago /bin/sh -c #(nop) MAINTAINER bestme <bestm... 0B
<missing> 2 years ago /bin/sh -c #(nop) CMD ["catalina.sh" "run"] 0B
<missing> 2 years ago /bin/sh -c #(nop) EXPOSE 8080/tcp 0B
<missing> 2 years ago /bin/sh -c set -e && nativeLines="$(catal... 0B
<missing> 2 years ago /bin/sh -c set -x && curl -fSL "$TOMCAT_... 16.6MB
<missing> 2 years ago /bin/sh -c #(nop) ENV TOMCAT_TGZ_URL=https... 0B
<missing> 2 years ago /bin/sh -c #(nop) ENV TOMCAT_VERSION=8.0.35 0B
<missing> 2 years ago /bin/sh -c #(nop) ENV TOMCAT_MAJOR=8 0B
<missing> 2 years ago /bin/sh -c set -ex && for key in 05AB33... 114kB
<missing> 2 years ago /bin/sh -c apt-get update && apt-get insta... 7.18MB
<missing> 2 years ago /bin/sh -c { echo 'deb http://httpredir.... 172B
<missing> 2 years ago /bin/sh -c #(nop) ENV OPENSSL_VERSION=1.0.... 0B
<missing> 2 years ago /bin/sh -c #(nop) workdir /usr/local/tomcat 0B
<missing> 2 years ago /bin/sh -c mkdir -p "$CATALINA_HOME" 0B
<missing> 2 years ago /bin/sh -c #(nop) ENV PATH=/usr/local/tomc... 0B
<missing> 2 years ago /bin/sh -c #(nop) ENV CATALINA_HOME=/usr/l... 0B
<missing> 2 years ago /bin/sh -c set -x && apt-get update && a... 163MB
<missing> 2 years ago /bin/sh -c #(nop) ENV JAVA_DEBIAN_VERSION=... 0B
<missing> 2 years ago /bin/sh -c #(nop) ENV JAVA_VERSION=7u101 0B
<missing> 2 years ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/lib/j... 0B
<missing> 2 years ago /bin/sh -c { echo '#!/bin/sh'; echo 's... 87B
<missing> 2 years ago /bin/sh -c #(nop) ENV LANG=C.UTF-8 0B
<missing> 2 years ago /bin/sh -c apt-get update && apt-get insta... 1.17MB
<missing> 2 years ago /bin/sh -c apt-get update && apt-get insta... 44.3MB
<missing> 2 years ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 2 years ago /bin/sh -c #(nop) ADD file:5d8521419ad6cfb... 125MB
如果要让CREATED BY 列完整显示,可以加上 --no-trunc 参数。直接在shell中看会比较乱,可以输出到文件查看,就比较直观了
以PHPmyadmin docker镜像为例,效果如下:
docker logs 查看 docker 容器日志详解
<divid="content_views"> <p > 通过 docker logs 命令可以查看容器的日志。</p>
<p><strong > 命令格式:</strong></p>
<prename="code"><code><ol><li><div><divdata-line-number="1"></div></div><div><div>$ docker logs [OPTIONS] CONTAINER</div></div></li><li><div><divdata-line-number="2"></div></div><div><div> Options:</div></div></li><li><div><divdata-line-number="3"></div></div><div><div> <span>--details 显示更多的信息 </span></div></div></li><li><div><divdata-line-number="4"></div></div><div><div> -f, <span>--follow 跟踪实时日志 </span></div></div></li><li><div><divdata-line-number="5"></div></div><div><div> <span>--since string 显示自某个 timestamp 之后的日志,或相对时间,如 42m(即 42 分钟)</span></div></div></li><li><div><divdata-line-number="6"></div></div><div><div> <span>--tail string 从日志末尾显示多少行日志, 默认是 all</span></div></div></li><li><div><divdata-line-number="7"></div></div><div><div> -t, <span>--timestamps 显示时间戳 </span></div></div></li><li><div><divdata-line-number="8"></div></div><div><div> <span>--until string 显示自某个 timestamp 之前的日志,或相对时间,如 42m(即 42 分钟)</span></div></div></li></ol></code><divdata-title="复制" onclick="hljs.copyCode (event)"></div></pre>
<p><strong > 例子:</strong></p>
<p> 查看指定时间后的日志,只显示最后 100 行:</p>
<prename="code"><code>$ docker logs -f -t --since=<span>"2018-02-08"</span> --tail=<span>100</span> CONTAINER_ID </code><divdata-title="复制" onclick="hljs.copyCode (event)"></div></pre>
<p> 查看最近 30 分钟的日志:</p>
<prename="code"><code>$ docker logs <span>--since 30m CONTAINER_ID</span> </code><divdata-title="复制" onclick="hljs.copyCode (event)"></div></pre>
<p> 查看某时间之后的日志:</p>
<prename="code"><code>$ docker logs -t --since=<span>"2018-02-08T13:23:37"</span> CONTAINER_ID </code><divdata-title="复制" onclick="hljs.copyCode (event)"></div></pre>
<p> 查看某时间段日志:</p>
<prename="code"><code>$ docker logs -t --since=<span>"2018-02-08T13:23:37"</span> --<span>until</span> <span>"2018-02-09T12:23:37"</span> CONTAINER_ID </code><divdata-title="复制" onclick="hljs.copyCode (event)"></div></pre>
</div>
docker logs 查看docker容器日志
命令格式
$ docker logs [OPTIONS] CONTAINER
Options:
--details 显示更多的信息
-f,--follow 跟踪实时日志
--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
--tail string 从日志末尾显示多少行日志, 默认是all
-t,--timestamps 显示时间戳
--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
例子
查看指定时间后的日志,只显示最后100行:
$ docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID
查看最近30分钟的日志:
$ docker logs --since 30m CONTAINER_ID
查看某时间之后的日志:
$ docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID
查看某时间段日志:
$ docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID
容器日志的输出形式
-
stdout 标准输出
-
stderr 标准错误
-
以json格式存放在容器对于到日志文件中
docker日志内容类型
-
docker自身运行时Daemon的日志内容
-
docker容器的日志内容
docker logs的实现原理
“Docker Daemon是Docker架构中一个常驻在后台的系统进程,它在后台启动了一个Server,Server负责接受Docker Client发送的请求;接受请求后,Server通过路由与分发调度,找到相应的Handler来执行请求。–《Docker源码分析》”
当我们输入docker logs的时候会转化为Docker Client向Docker Daemon发起请求,Docker Daemon 在运行容器时会去创建一个协程(goroutine),绑定了整个容器内所有进程的标准输出文件描述符。因此容器内应用的所有只要是标准输出日志,都会被 goroutine 接收,Docker Daemon会根据容器id和日志类型读取日志内容,最终会输出到用户终端上并且通过json格式存放在/var/lib/docker/containers目录下。
容器日志文件的生命周期
docker logs是跟随容器而产生的,如果删除了某个容器,相应的日志文件也会随着被删除
今天关于docker集群集中查看服务日志和docker 查看服务的分享就到这里,希望大家有所收获,若想了解更多关于Centos7 docker+zookeeper集群构建、docker history 查看docker镜像构建过程 还原dockerfile 查看启动参数、docker logs 查看 docker 容器日志详解、docker logs 查看docker容器日志等相关知识,可以在本站进行查询。
本文标签: