Docker和ELK搭建日志平台

原作者:灼灼2015
链接:https://www.jianshu.com/p/460a307adebb

Elasticsearch, Logstash 和 Kibana 简称ELK,是日志平台。

用途:Bug定位,历史统计。

自从有了Dokcer 什么都想往里面放来着。

1. 规划

从N台应用服务器上收集localhost_access的日志,通过Logstash做数据加工处理(filter),使用Elasticsearch保存数据建立索引,最后通过Kibana 图形界面-来使用日志信息。


1211247-32f5f2bab1774d76.jpg

重复配置jdk,提前准备elk的基础镜像

  • 准备工作 下载jdk1.8

  • 编写dockerfile

FROM centos:latest
MAINTAINER yangxi
VOLUME [ "/opt/product/data/" ]
RUN  /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN /bin/echo -e "ZONE="Asia/Shanghai"\nUTC=false\nRTC=false" > /etc/sysconfig/clock
RUN mkdir /opt/product/tools/
ADD ./tools /opt/product/tools/
ENV JAVA_HOME /opt/product/tools/jdk1.8.0_51
CMD ["/usr/sbin/init"]

  • docker build -t elkbase:v1.0 ./

    得到一个ELK的基础镜像。

3. Elasticsearch 配置

ELK的官方网站 https://www.elastic.co

  • 下载Elasticsearch tar包

  • 编写dockerfile

FROM elkbase:v1.0
MAINTAINER yangxi
VOLUME [ "/opt/product/data/" ]
ADD ./elasticsearch-6.1.1 /opt/product/elasticsearch-6.1.1
RUN useradd elk && chown -R elk:elk /opt/product/elasticsearch-6.1.1
ADD elastic.sh /root/
RUN chmod +x /root/elastic.sh
EXPOSE 9200
EXPOSE 9300
ENTRYPOINT ["/root/elastic.sh"]
CMD ["/usr/sbin/init"]

  • 编写启动运行脚本
#!/bin/bash
echo "* soft nofile 65536" > /etc/security/limits.conf 
echo "* hard nofile 131072" > /etc/security/limits.conf
echo "* soft nproc 2048" > /etc/security/limits.conf
echo "* hard nproc 4096" > /etc/security/limits.conf
echo "vm.max_map_count=655360" > /etc/sysctl.conf 
sysctl -p
cd /opt/product/elasticsearch-6.1.1/config/
rm -rf elasticsearch.yml
cp /opt/product/data/elk/elasticsearch.yml .
chown -R elk:elk /opt/product/elasticsearch-6.1.1
chown -R elk:elk /opt/product/data/elk/elasticsearchdata
su - elk <<!
export JAVA_HOME=/opt/product/tools/jdk1.8.0_151
export PATH=$JAVA_HOME/bin:$PATH
/opt/product/elasticsearch-6.1.1/bin/elasticsearch

  • docker build -f elasticsearch:v1.0 ./

  • elasticsearch的配置

    在/opt/product/data目录下

    建立elk目录,并拷贝elasticsearch.yml文件到该目录

    设置

    path.data: /opt/product/data/elk/elasticsearchdata

    network.host: 0.0.0.0

    在/opt/product/data目录创建elasticsearchdata 目录

  • 启动

docker run --privileged --name es --restart=always -d -ti -v /opt/product/data:/opt/product/data -p 9200:9200 -p 9300:9300 elasticsearch:v1.0 /bin/bash

4. Logstash 配置

  • 下载Logstash tar包

  • 编写dockerfile

FROM elkbase:v1.0
MAINTAINER yangxi
VOLUME [ "/opt/product/data/" ]
ADD ./logstash-6.1.1 /opt/product/logstash-6.1.1
ADD logstash.sh /root/
RUN chmod +x /root/logstash.sh
EXPOSE 5044
EXPOSE 4560
EXPOSE 8080
ENTRYPOINT ["/root/logstash.sh"]
CMD ["/usr/sbin/init"]

  • 编写启动运行脚本
#!/bin/bash
export JAVA_HOME=/opt/product/tools/jdk1.8.0_151
export PATH=$JAVA_HOME/bin:$PATH
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF8  -Duser.timezone=GMT+08"
cd /opt/product/logstash-6.1.1/config/
rm -rf logstash.yml
cp /opt/product/data/elk/logstash.yml logstash.yml
/opt/product/logstash-6.1.1/bin/logstash -f /opt/product/data/elk/logstash.conf
  • docker build -f logstash:v1.0 ./

  • 配置logstash

    在/opt/product/data/elk目录下创建logstash.conf

input {     
   beats {
    port => "5044"
   }
}
output {
   elasticsearch {
       hosts => ["elasticsearch的ip:9200"]
       index => "logstash-tomcat-accesslog-%{+YYYY.MM.dd}"
    }       
}

logstash.yml

将logstash本身的logstash.yml 拷贝到/opt/product/data/elk目录下

在/opt/product/data/elk目录下建立 logstashdata目录

  • 启动logstash
docker run  --name logstash --privileged=true --restart=always -d -ti -v /opt/product/data:/opt/product/data -p 5044:5044 -p 4560:4560 -p 18080:8080 logstash:v1.0 /bin/bash

5. kibana 配置

  • 下载kibana

  • 编写dockerfile

FROM elkbase:v1.0
MAINTAINER yangxi
VOLUME [ "/opt/product/data/" ]
ADD ./kibana-6.1.1-linux-x86_64 /opt/product/kibana-6.1.1-linux-x86_64
ADD kibana.sh /root/
RUN chmod +x /root/kibana.sh
EXPOSE 5601
ENTRYPOINT ["/root/kibana.sh"]
CMD ["/usr/sbin/init"]

  • 编写运行文件
#!/bin/bash 
export JAVA_HOME=/opt/product/tools/jdk1.8.0_151
export PATH=$JAVA_HOME/bin:$PATH
cd /opt/product/kibana-6.1.1-linux-x86_64/config/
rm -rf kibana.yml
ln -s /opt/product/data/elk/kibana.yml . 
cd /opt/product/kibana-6.1.1-linux-x86_64/
rm -rf data
ln -s  /opt/product/data/elk/kibanadata /opt/product/kibana-6.1.1-linux-x86_64/data
/opt/product/kibana-6.1.1-linux-x86_64/bin/kibana 

  • docker build -t kibana:v1.0 ./

  • 配置

    在/opt/product/data/elk目录下建立kibana.yml

server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://ip:9200"

  • 启动
docker run  --name kibana --privileged=true --restart=always -d -ti -v /opt/product/data:/opt/product/data -p 5601:5601  kibana:v1.0 /bin/bash

6. FileBeat配置

  • 下载Filebeat

  • 编写dockerfile

FROM elkbase:v1.0
MAINTAINER yangxi
VOLUME [ "/opt/product/data/" ]
ADD ./filebeat-6.1.2-linux-x86_64 /opt/product/filebeat-6.1.2-linux-x86_64
ADD filebeat.sh /root/
RUN chmod +x /root/filebeat.sh
ENTRYPOINT ["/root/filebeat.sh"]
CMD ["/usr/sbin/init"]

  • 编写运行脚本
#!/bin/bash
export JAVA_HOME=/opt/product/tools/jdk1.8.0_151
export PATH=$JAVA_HOME/bin:$PATH
cd /opt/product/filebeat-6.1.2-linux-x86_64/
rm -rf filebeat.yml
ln -s /opt/product/data/elk/filebeat.yml . 
rm -rf data 
ln -s /opt/product/data/elk/filebeatdata /opt/product/filebeat-6.1.2-linux-x86_64/data
/opt/product/filebeat-6.1.2-linux-x86_64/filebeat -e -c filebeat.yml

  • docker build -t filebeat:v1.0 ./

  • 配置filebeat

    在/opt/product/data/elk目录下 创建

    filebeat.yml

filebeat.prospectors:
  - input_type: log
    document_type: tomcataccess
  paths:
     - /opt/product/data/logs/tomcat/localhost_access_log*.txt
     - /opt/product/data/epg2logs/tomcat/localhost_access_log*.txt
output.logstash:
  # The Logstash hosts
  hosts: ["ip:5044"]

在/opt/product/data/elk 目录下创建filebeatdata

  • 启动filebeat

    filebeat.yml

docker run -d -ti --privileged -v /opt/product/data:/opt/product/data  filebeat:v1.0 /bin/bash

7. UI界面

  • 访问http://ip:5601/

  • 配置Configure an index pattern

    因当前是filebeat收集日志,Index name or pattern 为logstash-*

  • 界面展示

1211247-ab6dfc8e1061e93b.png

8. 遇到错误

  • 使用rpm安装logstash时遇到如下错误,改成tar.gz解压缩则是正常的。

    error: unpacking of archive failed on file /usr/share/logstash/vendor/bundle/jruby/1.9/gems/logstash-filter-geoip-4.0.4-java/vendor/GeoLite2-City.mmdb;58776068: cpio: read failed - No such file or directory

  • 在docker中启动elasticsearch后,容器内可访问,但用ip:port无法访问。

    ERROR: bootstrap checks failed

    max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

  • 在使用IP:PORT无法访问时 需要将

    server.host: "localhost" 改成server.host: 0.0.0.0

  • copy、add 等操作是基于Dockerfile的相对路径,绝对路径会报错。

  • 由于elastic、kibana、logstash需访问宿主挂载的磁盘空间,因此新建docker时,需开启特权模式 --privileged

docker run --name es --privileged --restart=always -d -ti -v /opt/product/data:/opt/product/data -p 9200:9200 -p 9300:9300 elasticsearch:v1.0 /bin/bash


docker run  --name kibana --privileged=true --restart=always -d -ti -v /opt/product/data:/opt/product/data -p 5601:5601  kibana:v1.0 /bin/bash


docker run  --name logstash --privileged=true --restart=always -d -ti -v /opt/product/data:/opt/product/data -p 5044:5044 -p 4560:4560 -p 18080:8080 logstash:v1.0 /bin/bash
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355