【BAE专业版】搭建kibana对日志进行分析

  • 简介
上一篇文章中,我们介绍了如何将日志写入到ElasticSearch,但查询和展示需要自己编写代码。在这篇文章中,我们将介绍如何在BAE专业版上快速搭建kibana。
  • 准备kibana镜像

Kibana 4.1官方Docker镜像:https://github.com/docker-library/kibana/tree/7ce21f8aa1e58443c3031fdbdf83a08ce34e49a4/4.1

这里需要对Dockerfile进行简单修改,修改后的代码如下(更改部分已标):

FROM debian:jessie

# add our user and group first to make sure their IDs get assigned consistently
RUN groupadd -r kibana && useradd -r -m -g kibana kibana

RUN apt-get update && apt-get install -y \
		ca-certificates \
		wget \
	--no-install-recommends && rm -rf /var/lib/apt/lists/*

# grab gosu for easy step-down from root
ENV GOSU_VERSION 1.7
RUN set -x \
	&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
	&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
	&& export GNUPGHOME="$(mktemp -d)" \
	&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
	&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
	&& rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \
	&& chmod +x /usr/local/bin/gosu \
	&& gosu nobody true

# grab tini for signal processing and zombie killing
ENV TINI_VERSION v0.9.0
RUN set -x \
	&& wget -O /usr/local/bin/tini "https://github.com/krallin/tini/releases/download/$TINI_VERSION/tini" \
	&& wget -O /usr/local/bin/tini.asc "https://github.com/krallin/tini/releases/download/$TINI_VERSION/tini.asc" \
	&& export GNUPGHOME="$(mktemp -d)" \
	&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys 6380DC428747F6C393FEACA59A84159D7001A4E5 \
	&& gpg --batch --verify /usr/local/bin/tini.asc /usr/local/bin/tini \
	&& rm -r "$GNUPGHOME" /usr/local/bin/tini.asc \
	&& chmod +x /usr/local/bin/tini \
	&& tini -h

ENV KIBANA_VERSION 4.1.11
ENV KIBANA_SHA1 13655cf94f5c47e8ab4d94c8170128f63be46ad5

RUN set -x \
	&& wget -O kibana.tar.gz "https://download.elastic.co/kibana/kibana/kibana-${KIBANA_VERSION}-linux-x64.tar.gz" \
	&& echo "${KIBANA_SHA1} *kibana.tar.gz" | sha1sum -c - \
	&& mkdir -p /opt/kibana \
	&& tar -xz --strip-components=1 -C /opt/kibana -f kibana.tar.gz \
	&& chown -R kibana:kibana /opt/kibana \
	&& rm kibana.tar.gz \
	\
# ensure the default configuration is useful when using --link
        && sed -ri "s!^(\#\s*)?(elasticsearch_url:).*!\2 'http://your_elastic_search/url'!" /opt/kibana/config/kibana.yml \
        && sed -ri "s!^(\#\s*)?(kibana_elasticsearch_username:).*!\2 'your_elastic_search_user_name'!" /opt/kibana/config/kibana.yml \
        && sed -ri "s!^(\#\s*)?(kibana_elasticsearch_password:).*!\2 'your_elastic_search_password'!" /opt/kibana/config/kibana.yml \
        && sed -ri "s!^(\#\s*)?(port:).*!\2 8080!" /opt/kibana/config/kibana.yml \
        && sed -ri "s!^(\#\s*)?(log_file:).*!\2 \/home\/bae\/log\/kibana.log!" /opt/kibana/config/kibana.yml

RUN mkdir -p /home/bae/log \
        && chmod a+rwx /home/bae/log

ENV PATH /opt/kibana/bin:$PATH

COPY docker-entrypoint.sh /

EXPOSE 8080
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["kibana"]

其中,http://your_elastic_search/url,需要填入你的ElasticSearch集群的地址;your_elastic_search_user_name和your_elastic_search_password填入你的账号和密码

主要的修改点是elasticSearch的配置,kibana的监听端口以及日志的位置。

为了方便我们修改kibana配置,我们还可以更改docker-entrypoint.sh,可以通过上传部署代码更换配置,docker-entrypoint.sh修改如下(更改部分已标):

#!/bin/bash
set -e

MY_KIBANA_CONF="/home/bae/app/kibana.yml"
KIBANA_CONF="/opt/kibana/config/kibana.yml"

# Add kibana as command if needed
if [[ "$1" == -* ]]; then
        set -- kibana "$@"
fi

# Run as user "kibana" if the command is "kibana"
if [ "$1" = 'kibana' ]; then
        if [ -f "$MY_KIBANA_CONF" ]; then
                cp $MY_KIBANA_CONF $KIBANA_CONF
        fi

        set -- gosu kibana tini -- "$@"
fi

exec "$@"

这样我们上传代码时,在根目录中包含文件kibana.xml就可以使用新的配置文件。

将Dockerfile和docker-entrypoint.sh放在同一个目录下,在该目录下运行创建镜像代码,参考代码如下:

docker build -t registry.bce.baidu.com/user_id/image_name:tag_name .

其中,user_id为用户的ID,请查看自己的账号信息;image_name和tag_name分别为镜像名称和标签名,用户可以自行定义。
制作好后,将镜像上传到BAE专业版中,参考代码如下:

docker push registry.bce.baidu.com/user_id/image_name:tag_name

自定义镜像可参考:https://cloud.baidu.com/doc/BAE-Pro/GUIGettingStarted.html#.E8.87.AA.E5.AE.9A.E4.B9.89.E9.95.9C.E5.83.8F

  •   创建应用

使用我们上传的自定义镜像创建应用,具体操作流程请参考:https://cloud.baidu.com/doc/BAE-Pro/GUIGettingStarted.html#.E8.87.AA.E5.AE.9A.E4.B9.89.E9.95.9C.E5.83.8F

  • 配置Logstash

Logstash可以配置到你的其他应用中,将log导入到ElasticSearch中。

Logstash需要java8运行环境,所以可以直接将logstash放入到已有的Bae专业版的java应用用,对于其他语言的,需要制作包含java8和所需环境的镜像。

这里以已有的java应用为例。

(1)将logstash放入代码根目录。可到官网下载logstash的tar.gz:https://www.elastic.co/downloads/logstash,解压到代码根目录。

(2)写入logstash配置文件,参考如下:

input {
    file {
        path => ["/home/bae/log/*.log"]
        type => "bae"
        start_position => "beginning"
    }
}

output {
    elasticsearch {
        hosts => ["http://your_elastic_search_url"]
        index => "logstash-%{type}-%{+YYYY.MM.dd}"
        document_type => "%{type}"
        workers => 1
        flush_size => 20000
        idle_flush_time => 10
        template_overwrite => true
        user => "elastic_search_user"
        password => "elastic_search_password"
    }
}

(3)添加cronb到app.conf中,定时启动logstash,可参考配置app.conf,代码如下:

crond :
  service : on
  crontab :
    - "*/1 * * * *  sh /home/bae/app/run_logstash_if_not.sh"

(4)启动logstash脚本run_logstash_if_not.sh,参考如下:

#!/bin/bash

ps axu | grep logstash | grep -v grep

if [ "$?" -eq 0 ]; then
    nohup /home/bae/app/logstash-2.3.4/bin/logstash -f /home/bae/app/logstash.conf > /home/bae/log/logstash.log 2>&1 &
fi

最终,代码目录结构如下:

+ (baeapp_xdsfsfds)
----app.conf
----logstash.conf
----run_logstash_if_not.sh
----ROOT                    // 你的java应用代码

将代码部署到你的java应用中,即可启动logstash,将log传输到ElasticSearch中。

  • 使用kibana

刚打开kibana会让你配置用户名密码,之后即可使用账户密码登录查看log。

第一次进入会让你配置,只有logstash已经将数据传入,这一步配置就会有相应的选项可以选择(这里需要等logstash运行并把数据传入ElasticSearch)。

如果需要查询相应的关键字,只需要在搜索框写入相应的值。

更多的使用方法,可以参考官网文档:https://www.elastic.co/guide/en/kibana/current/index.html

此条目发表在 BAE使用 分类目录。将固定链接加入收藏夹。

发表评论