GVKun编程网logo

docker集群集中查看服务日志(docker 查看服务)

21

如果您对docker集群集中查看服务日志感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于docker集群集中查看服务日志的详细内容,我们还将为您解答docker查看服务的相关

如果您对docker集群集中查看服务日志感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于docker集群集中查看服务日志的详细内容,我们还将为您解答docker 查看服务的相关问题,并且为您提供关于Centos7 docker+zookeeper集群构建、docker history 查看docker镜像构建过程 还原dockerfile 查看启动参数、docker logs 查看 docker 容器日志详解、docker logs 查看docker容器日志的有价值信息。

本文目录一览:

docker集群集中查看服务日志(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 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下的配置

二. 注意事项

  1. Invalid config, exiting abnormally错误,请检查zoo.cfg集群是否存在bug
  2. zookepeer集群启动报错,unable to run quorum server。
    在配置文件/home/zookeeper/conf/zoo.cfg ,找到下面两个配置的值
dataDir=/data
dataLogDir=/data/logs

删除下面两个目录的version-2:

删除下面两个目录的version-2:

然后重新启动即可

  1. 集群个数一般为奇数。
  2. 集群启动成功需满足(过半原则): 已启动个数(未成功)> 总集群个数(N)/ 2 。然后做集群的一个个启动,一开始启动并未成功,监听等待其他启动,达到条件之后,集群启动成功。

docker history 查看docker镜像构建过程 还原dockerfile 查看启动参数

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 容器日志详解

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 查看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容器日志等相关知识,可以在本站进行查询。

本文标签: