位置: 主页 > 页游sf大全 >

Docker实战(十一):Docker安装ELK环境(二)

2.Redis

output: 负责将结构化的数据存储进入elasticsearch

1.Nginx + Logstash agent
logstash indexer的配置文件logstash.conf input { redis { host => "10.211.55.4" port => 6379 password => admin data_type => "list" key => "logstash:redis" } } filter { grok { match => [ "message", "%{IPORHOST:http_host} %{IPORHOST:server_ip} %{IPORHOST:client_ip} \[%{HTTPDATE:timestamp}\] \"%{WORD:http_verb} (?:%{PATH:baseurl}\?%{NOTSPACE:params}(?: HTTP/%{NUMBER:http_version})?|%{DATA:raw_http_request})\" (%{NOTSPACE:params})?|- %{NUMBER:http_status_code} (?:%{NUMBER:bytes_read}|-) %{QS:referrer} %{QS:agent} %{NUMBER:time_duration:float} %{NUMBER:time_backend_response:float}" ] } kv { prefix => "params." field_split => "&" source => "params" } urldecode { all_fields => true } date { locale => "en" match => ["timestamp" , "dd/MMM/YYYY:HH:mm:ss Z"] } } output { elasticsearch { embedded => false codec => "json" protocol => "http" host => "10.211.55.4" port => 9200 index => "birdlogstash" } } 注意

logstash indexer的配置文件就比较麻烦了,需要配置的有三个部分

我们这里是把各个组件拆开,模拟每个组件是一个集群,每个集群部署在一台机器上

Elasticsearch:实时日志分析服务的核心技术,一个schemaless,实时的数据存储服务,通过index组织数据,兼具强大的搜索和统计功能。

5.Kibana

这里实现的是 ELK + Redis 收集 Nginx 的 access.log

Nginx配置文件 daemon off; master_process off; error_log logs/error.log; ... http { include mime.types; default_type application/octet-stream; # 设置nginx日志格式,格式的名称logstash log_format logstash '$http_host $server_addr $remote_addr [$time_local] "$request" $request_body $status $body_bytes_sent "$http_referer" "$http_user_agent" $request_time $upstream_response_time'; # 设置access_log日志输出的文件路径,以及使用的日志格式名称 access_log logs/access.log logstash; # 以下内容省略 ... } logstash agent的配置文件logstash.conf input { file { type => "nginx_access" path => ["/usr/local/nginx/logs/access.log"] } } output { redis { host => "10.211.55.4" port => 6379 password => admin data_type => "list" key => "logstash:redis" } } 注意

这里配置就是往redis队列中塞入日志就行,所以input的来源是Nginx的log文件,output的目标设置为redis,这里redis充当MQ消息队列的作用。

input: 负责从redis中获取日志数据

3.Logstash indexer

Kibana:基于Elasticsearch的数据可视化组件,超强的数据可视化能力是众多公司选择ELK stack的重要原因。

Logstash Indexer:做日志解析,统一成JSON输出给Elasticsearch。

kibana.yml配置文件 # 这里配置Kibana访问ES集群的地址 # The Elasticsearch instance to use for all your queries. elasticsearch_url: "http://10.211.55.4:9200" elk_log_agent的Dockerfile文件 ############################################ # version : birdben/elk_log_agent:v1 # desc : 当前版本安装的elk_log_agent ############################################ # 设置继承自我们创建的 jdk7 镜像 FROM birdben/jdk7:v1 # 下面是一些创建者的基本信息 MAINTAINER birdben (191654006@163.com) # 设置环境变量,所有操作都是非交互式的 ENV DEBIAN_FRONTEND noninteractive # 添加 supervisord 的配置文件,并复制配置文件到对应目录下面。(supervisord.conf文件和Dockerfile文件在同一路径) COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf # 设置 LOGSTASH 的环境变量,若读者有其他的环境变量需要设置,也可以在这里添加。 ENV LOGSTASH_HOME /software/logstash-1.5.4 # 复制 logstash-1.5.4 文件到镜像中(logstash-1.5.4 文件夹要和Dockerfile文件在同一路径) ADD logstash-1.5.4 /software/logstash-1.5.4 # 解决环境问题,否则logstash无法从log文件中采集日志。具体环境: Logstash 1.5, Ubuntu 14.04, Oracle JDK7 RUN ln -s /lib/x86_64-linux-gnu/libcrypt.so.1 /usr/lib/x86_64-linux-gnu/libcrypt.so # 安装升级gcc RUN sudo rm -rf /var/lib/apt/lists/* RUN sudo apt-get update RUN sudo apt-get -y install \ build-essential RUN sudo mkdir -p /software/temp RUN wget http://nginx.org/download/nginx-1.8.0.tar.gz && tar -zxvf nginx-1.8.0.tar.gz -C /software/temp RUN wget http://zlib.net/zlib-1.2.8.tar.gz && tar -zxvf zlib-1.2.8.tar.gz -C /software/temp RUN wget http://1.0.1q.tar.gz && tar -zxvf openssl-1.0.1q.tar.gz -C /software/temp RUN wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz && tar -zxvf pcre-8.37.tar.gz -C /software/temp RUN cd /software/temp/nginx-1.8.0 && sudo ./configure --sbin-path=/software/nginx-1.8.0/nginx --conf-path=/software/nginx-1.8.0/nginx.conf --pid-path=/software/nginx-1.8.0/nginx.pid --with-http_ssl_module --with-pcre=/software/temp/pcre-8.37 --with-zlib=/software/temp/zlib-1.2.8 --with-openssl=/software/temp/openssl-1.0.1q && sudo make && sudo make install # 设置nginx是非daemon启动 RUN echo 'daemon off;' >> /software/nginx-1.8.0/nginx.conf RUN echo 'master_process off;' >> /software/nginx-1.8.0/nginx.conf RUN echo 'error_log logs/error.log;' >> /software/nginx-1.8.0/nginx.conf # 设置 NGINX 的环境变量,若读者有其他的环境变量需要设置,也可以在这里添加。 ENV NGINX_HOME /software/nginx-1.8.0 # 挂载/logstash目录 VOLUME ["/logstash"] # 容器需要开放Nginx 80端口 EXPOSE 80 # 执行supervisord来同时执行多个命令,使用 supervisord 的可执行路径启动服务。 CMD ["/usr/bin/supervisord"] elk_log_agent的supervisord.conf配置文件 # 配置文件包含目录和进程 # 第一段 supervsord 配置软件本身,使用 nodaemon 参数来运行。 # 第二段包含要控制的 2 个服务。每一段包含一个服务的目录和启动这个服务的命令。 [supervisord] nodaemon=true [program:sshd] command=/usr/sbin/sshd -D [program:nginx] command=/software/nginx-1.8.0/nginx -c /software/nginx-1.8.0/nginx.conf [program:logstash] # 指定配置文件时,一定要使用绝对路径,相对路径是不好用的,这个坑已经踩过两次了。。 command=/software/logstash-1.5.4/bin/logstash -f /logstash/logstash_agent.conf elk_log_agent的控制台终端 # 构建镜像 $ docker build -t="birdben/elk_log_agent:v1" . # 执行已经构件好的镜像 $ docker run -p 9999:22 -p 8888:80 -t -i -v /docker/logstash:/logstash "birdben/elk_log_agent:v1" logstash的Dockerfile文件 ############################################ # version : birdben/logstash:v1 # desc : 当前版本安装的logstash ############################################ # 设置继承自我们创建的 jdk7 镜像 FROM birdben/jdk7:v1 # 下面是一些创建者的基本信息 MAINTAINER birdben (191654006@163.com) # 设置环境变量,所有操作都是非交互式的 ENV DEBIAN_FRONTEND noninteractive # 添加 supervisord 的配置文件,并复制配置文件到对应目录下面。(supervisord.conf文件和Dockerfile文件在同一路径) COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf # 设置 LOGSTASH 的环境变量,若读者有其他的环境变量需要设置,也可以在这里添加。 ENV LOGSTASH_HOME /software/logstash-1.5.4 # 复制 logstash-1.5.4 文件到镜像中(logstash-1.5.4文件夹要和Dockerfile文件在同一路径) ADD logstash-1.5.4 /software/logstash-1.5.4 # 解决环境问题,否则logstash无法从log文件中采集日志。具体环境: Logstash 1.5, Ubuntu 14.04, Oracle JDK7 RUN ln -s /lib/x86_64-linux-gnu/libcrypt.so.1 /usr/lib/x86_64-linux-gnu/libcrypt.so # 挂载/logstash目录 VOLUME ["/logstash"] # 执行supervisord来同时执行多个命令,使用 supervisord 的可执行路径启动服务。 CMD ["/usr/bin/supervisord"] logstash的supervisord.conf配置文件 # 配置文件包含目录和进程 # 第一段 supervsord 配置软件本身,使用 nodaemon 参数来运行。 # 第二段包含要控制的 2 个服务。每一段包含一个服务的目录和启动这个服务的命令。 [supervisord] nodaemon=true [program:sshd] command=/usr/sbin/sshd -D [program:logstash] # 指定配置文件时,一定要使用绝对路径,相对路径是不好用的,这个坑已经踩过两次了。。 command=/software/logstash-1.5.4/bin/logstash -f /logstash/logstash.conf logstash的控制台终端 # 构建镜像 $ docker build -t="birdben/logstash:v1" . # 执行已经构件好的镜像 $ docker run -p 9999:22 -t -i -v /docker/logstash:/logstash "birdben/logstash:v1" kibana的Dockerfile文件 ############################################ # version : birdben/kibana:v1 # desc : 当前版本安装的kibana ############################################ # 设置继承自我们创建的 tools 镜像 FROM birdben/tools:v1 # 下面是一些创建者的基本信息 MAINTAINER birdben (191654006@163.com) # 设置环境变量,所有操作都是非交互式的 ENV DEBIAN_FRONTEND noninteractive # 添加 supervisord 的配置文件,并复制配置文件到对应目录下面。(supervisord.conf文件和Dockerfile文件在同一路径) COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf # 设置 KIBANA 的环境变量,若读者有其他的环境变量需要设置,也可以在这里添加。 ENV KIBANA_HOME /software/kibana-4.1.2 # 复制 kibana-4.1.2 文件到镜像中(kibana-4.1.2文件夹要和Dockerfile文件在同一路径) ADD kibana-4.1.2 /software/kibana-4.1.2 # 容器需要开放Kibana的5601端口 EXPOSE 5601 # 执行supervisord来同时执行多个命令,使用 supervisord 的可执行路径启动服务。 CMD ["/usr/bin/supervisord"] kibana的supervisord.conf配置文件 # 配置文件包含目录和进程 # 第一段 supervsord 配置软件本身,使用 nodaemon 参数来运行。 # 第二段包含要控制的 2 个服务。每一段包含一个服务的目录和启动这个服务的命令。 [supervisord] nodaemon=true [program:sshd] command=/usr/sbin/sshd -D [program:kibana] command=/software/kibana-4.1.2/bin/kibana kibana的控制台终端 # 构建镜像 $ docker build -t="birdben/kibana:v1" . # 执行已经构件好的镜像 $ docker run -p 9999:22 -p 5601:5601 -t -i "birdben/kibana:v1" 注意

ES和Redis如之前的文章介绍部署即可

日志收集系统架构简介

Logstash Agent/Flume:采集各个业务系统的日志,然后发送给Redis/Kafka消息队列。

4.ElasticSearch
验证日志收集
热门文章
最新文章
Copyright © 2011-2018 超变态网页游戏 版权所有