阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

ELK实时日志分析平台部署搭建详细实现过程

114次阅读
没有评论

共计 13512 个字符,预计需要花费 34 分钟才能阅读完成。

1、ELK平台介绍

在搜索 ELK 资料的时候,发现这篇文章比较好,于是摘抄一小段:

日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。

通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的 syslog,将所有服务器上的日志收集汇总。

集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用 grep、awk 和 wc 等 Linux 命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。

开源实时日志分析 ELK 平台能够完美的解决我们上述的问题,ELK 由 ElasticSearch、Logstash 和 Kiabana 三个开源工具组成。官方网站:https://www.elastic.co/product

E:\u\elk\pic\01_1.png

ELK 实时日志分析平台部署搭建详细实现过程

2、安装准备

Elk平台环境

系统

版本

服务器操作系统

CentOS release 6.7 (Final)

ElasticSearch

2.3.4

Logstash

2.3.4

Kibana

4.5.3

Jdk

1.8

 

注:由于 Logstash 的运行依赖于 Java 环境,Logstash1.5 以上版本不低于 java 1.7,因此推荐使用最新版本的Java。因为我们只需要Java 的运行环境,所以可以只安装JRE,不过这里我依然使用JDK,请自行搜索安装,我这里准备使用1.7

3、下载

官方网址:https://www.elastic.co/downloads,如下图所示:E:\u\elk\pic\01_2.png

ELK 实时日志分析平台部署搭建详细实现过程

从中获得下载地址:

wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.4/elasticsearch-2.3.4.tar.gz

wget https://download.elastic.co/logstash/logstash/logstash-2.3.4.tar.gz

wget https://download.elastic.co/kibana/kibana/kibana-4.5.3-linux-x64.tar.gz

wget http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.tar.gz

4、安装调试

4.1、安装jdk

使用 root 安装 jdk

mkdir -p /usr/lib/jvm

tar -xvf  jdk-8u45-linux-x64.tar.gz -C /usr/lib/jvm

# vim /etc/profile 配置系统参数
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_45
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

sudo update-alternatives –install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_45/bin/java 300

sudo update-alternatives –install /usr/bin/javac javac /usr/lib/jvm/jdk1.8.0_45/bin/javac 300

4.2、安装elasticsearch

使用 elk 账号安装 elasticearch:

# 解压缩安装

useradd elk

su – elk

tar -xvf elasticsearch-2.3.4.tar.gz

cd elasticsearch-2.3.4

# 安装 Head 插件

./bin/plugin install mobz/elasticsearch-head

ls plugins/

# ls能看到 head 文件即可表示 ok 了。

[elk@hch_test_dbm1_121_62 elasticsearch-2.3.4]$ ll plugins/

总用量 4

drwxrwxr-x. 5 elk elk 4096 8 月  2 17:26 head

[elk@hch_test_dbm1_121_62 elasticsearch-2.3.4]$

编译 es 的配置文件:

cluster.name: es_cluster

node.name: node0

path.data: /home/elk/data

path.logs: /home/elk/logs

# 当前的 host ip 地址

network.host: 192.168.121.62

network.port: 9200

启动 es:

./bin/elasticsearch &

看后台日志,发现它和其它的节点的传输端口为 9300,而接受 HTTP 请求的端口为 9200。日志如下所示:

[elk@hch_test_dbm1_121_62 elasticsearch-2.3.4]$ more ../logs/es_cluster.log

[2016-08-02 17:47:23,285][WARN][bootstrap] unable to install syscall filter: seccomp unavailable: requires kernel 3.5+ with CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER compiled

in

[2016-08-02 17:47:23,579][INFO][node] [node0] version[2.3.4], pid[21176], build[e455fd0/2016-06-30T11:24:31Z]

[2016-08-02 17:47:23,586][INFO][node] [node0] initializing …

[2016-08-02 17:47:24,213][INFO][plugins] [node0] modules [reindex, lang-expression, lang-groovy], plugins [head], sites [head]

[2016-08-02 17:47:24,235][INFO][env] [node0] using [1] data paths, mounts [[/home (/dev/mapper/vg_dbmlslave1-lv_home)]], net usable_space [542.1gb], net total_space [10

17.2gb], spins? [possibly], types [ext4]

[2016-08-02 17:47:24,235][INFO][env] [node0] heap size [989.8mb], compressed ordinary object pointers [true]

[2016-08-02 17:47:24,235][WARN][env] [node0] max file descriptors [4096] for elasticsearch process likely too low, consider increasing to at least [65536]

[2016-08-02 17:47:25,828][INFO][node] [node0] initialized

[2016-08-02 17:47:25,828][INFO][node] [node0] starting …

[2016-08-02 17:47:25,939][INFO][transport] [node0] publish_address {192.168.121.62:9300}, bound_addresses {192.168.121.62:9300}

[2016-08-02 17:47:25,944][INFO][discovery] [node0] es_cluster/626_Pu5sQzy96m7P0EaU4g

[2016-08-02 17:47:29,028][INFO][cluster.service] [node0] new_master {node0}{626_Pu5sQzy96m7P0EaU4g}{192.168.121.62}{192.168.121.62:9300}, reason: zen-disco-join(elected_as_master,

[0] joins received)

[2016-08-02 17:47:29,116][INFO][http] [node0] publish_address {192.168.121.62:9200}, bound_addresses {192.168.121.62:9200}

[2016-08-02 17:47:29,117][INFO][node] [node0] started

[2016-08-02 17:47:29,149][INFO][gateway] [node0] recovered [0] indices into cluster_state

[elk@hch_test_dbm1_121_62 elasticsearch-2.3.4]$

打开 url 地址 http://192.168.121.62:9200/,E:\u\elk\pic\01_3.png

ELK 实时日志分析平台部署搭建详细实现过程 

看返回结果,有配置的 cluster_name、节点 name 信息以及安装的软件版本信息,其中安装的 head 插件,它是一个用浏览器跟 ES 集群交互的插件,可以查看集群状态、集群的 doc 内容、执行搜索和普通的 Rest 请求等。可以使用 web 界面来操作查看 http://192.168.121.62:9200/_plugin/head/,如下图 E:\u\elk\pic\01_4.png:

ELK 实时日志分析平台部署搭建详细实现过程

可以从界面看到,当前的 elas 集群里面没有 index 也没有 type,所以是空记录。

4.3、安装logstash

logstash其实它就是一个   收集器   而已,我们需要为它指定 InputOutput(当然 InputOutput可以为多个)。由于我们需要把 Java 代码中 Log4j 的日志输出到 ElasticSearch 中,因此这里的 Input 就是 Log4j,而Output 就是ElasticSearch

结构图如 E:\u\elk\pic\02.png 所示:

 ELK 实时日志分析平台部署搭建详细实现过程

 

安装配置:

# 解压缩安装

tar -xvf logstash-2.3.4.tar.gz

cd logstash-2.3.4

# 将配置文件放置在 config 文件夹下面

mkdir config

vim config/log4j_to_es.conf

# For detail structure of this file

# Set: https://www.elastic.co/guide/en/logstash/current/configuration-file-structure.html

input {

  # For detail config for log4j as input,

  # See: https://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.html

  log4j {

    mode => “server”

    host => “192.168.121.62”

    port => 4567

  }

}

filter {

  #Only matched data are send to output.

}

output {

  # For detail config for elasticsearch as output,

  # See: https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html

  elasticsearch {

    action => “index”          #The operation on ES

    hosts  => “192.168.121.62:9200”  #ElasticSearch host, can be array.

    index  => “applog”        #The index to write data to.

  }

}

启动 logstash,2 个参数一个是 agent 一个是配置文件:

[elk@hch_test_dbm1_121_62 logstash-2.3.4]$ ./bin/logstash agent -f config/log4j_to_es.conf

Settings: Default pipeline workers: 32

log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAuthCache).

log4j:WARN Please initialize the log4j system properly.

log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

Pipeline main started

接下来,可以使用 logstash 来收集日志并保存到 es 中了,可以使用一段 java 代码来实现它。

4.4elk3测试工程

工程环境是 eclipse,工程大概目录结构如下图 E:\u\elk\pic\04.png,一个 java 类 Application.java,一个日志配置文件 log4j.properties,一个调度配置文件 pom.xml:

 

1Application.java

package com.demo.elk;

import org.apache.log4j.Logger;

public class Application {

      private static final Logger LOGGER = Logger.getLogger(Application.class);

      public Application() {

          // TODO Auto-generated constructor stub

      }

      public static void main(String[] args) {

          // TODO Auto-generated method stub

        for (int i = 0; i < 10; i++) {

            LOGGER.error(“Info log [“ + i + “].”);

            try {

                      Thread.sleep(500);

                } catch (InterruptedException e) {

                      // TODO Auto-generated catch blockl

                      e.printStackTrace();

                }

        }

      }

}

2Pom.xml:

<project xmlns=“http://maven.apache.org/POM/4.0.0” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

  <modelVersion>4.0.0</modelVersion>

  <groupId>elk3</groupId>

  <artifactId>elk3</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <name>elk3</name>

  <dependency>

    <groupId>log4j</groupId>

    <artifactId>log4j</artifactId>

    <version>1.2.17</version>

</dependency>

</project>

3 log4j.properties

Log4j.properties,将 Log4j 的日志输出到 SocketAppender,因为官网是这么说的 E:\u\elk\pic\01_5.png:

ELK 实时日志分析平台部署搭建详细实现过程

Log4j.properties 文件:

log4j.rootLogger=INFO,console

# for package com.demo.elk, log would be sent to socket appender.

log4j.logger.com.demo.elk=DEBUG, socket

# appender socket

log4j.appender.socket=org.apache.log4j.net.SocketAppender

log4j.appender.socket.Port=4567

log4j.appender.socket.RemoteHost=192.168.121.62

log4j.appender.socket.layout=org.apache.log4j.PatternLayout

log4j.appender.socket.layout.ConversionPattern=%d [%-5p] [%l] %m%n

log4j.appender.socket.ReconnectionDelay=10000

# appender console

log4j.appender.console=org.apache.log4j.ConsoleAppender

log4j.appender.console.target=System.out

log4j.appender.console.layout=org.apache.log4j.PatternLayout

log4j.appender.console.layout.ConversionPattern=%d [%-5p] [%l] %m%n

注意:这里的端口号需要跟 Logstash 监听的端口号一致,这里是 4567。

4.5eclipse调试结果

1eclipse查看调试结果

在 eclipse 里面允许 java 程序,查看 console 的输出信息(这个 output 只是为了做一验证,没有这一步不输出到 console 也是可以的),调试成功后输出结果如下图 E:\u\elk\pic\05.png 所示:

ELK 实时日志分析平台部署搭建详细实现过程

2)去 Elasticsearchhead界面查看效果

去界面 http://192.168.121.62:9200/_plugin/head/ 查看效果,点击概览里面,看到下面绿色的就是 primay 分片,下��灰色的为非 primay 备份分片,如下图 E:\u\elk\pic\06.png 所示:

ELK 实时日志分析平台部署搭建详细实现过程

其中:

A:docs: 20(20) 表示一共有 20 个文档,一个文档一个日志记录;

B:node0  表示只有一个分片,5 个备份,分片暂时没有地方存放,所以显示为灰色 Unassigned 状态;

C:es_cluster集群健康值 : yellow (6 of 12) 表示因为有的分片没有地方存放所以集群报出了警告的黄色字体信息;

3)去 Elasticsearchbrower界面查看效果

E:\u\elk\pic\07.png

ELK 实时日志分析平台部署搭建详细实现过程

其中 索引中的 .kibana applog:表示是生成的索引集群,kibana 暂时是空的,没有记录不遍历查询,而 applog5个分片记录。

查询 6 个分片中用的 5 个. 30 命中. 耗时 0.054 秒 表示:看到 6 个分片,其中有 5 个是 applog,有 30 个是执行了 3 次 eclipse 所产生的 log 记录次数。

4)查看单个文档 _index 信息

在选择中的单个文档,点击左键,就会弹出单个文档的全部信息,除了 message 是我们的日志内容,其它都是 logstash 增加的内容信息,新增加的这些字段信息涵义可以参考官网:https://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.html的描述,如下图 E:\u\elk\pic\08.png 所示

 ELK 实时日志分析平台部署搭建详细实现过程

PS总结:上面列出的都是单个 EShead界面组件查看到的 elas 集群的数据和状态,只是一个简单的和 elas 的交互界面,并不能形成报表或者动态的图表,所以我们需要其它的专业工具来做搜索并生成图表。         

 

 

4.6、安装kinana

# 解压缩安装

tar -xvf kibana-4.5.3-linux-x64.tar.gz

cd kibana-4.5.3-linux-x64

# 配置   修改配置

vim config/kibana.yml  server.port: 5601

server.host: “192.168.121.62”

elasticsearch.url:“http://192.168.121.62:9200”

kibana.index: “.kibana”

# 启动kibana

./bin/kibana

[elk@hch_test_dbm1_121_62 kibana-4.5.3-linux-x64]$ ./bin/kibana

  log  [14:53:15.975] [info][status][plugin:kibana] Status changed from uninitialized to green – Ready

  log  [14:53:16.021] [info][status][plugin:elasticsearch] Status changed from uninitialized to yellow – Waiting for Elasticsearch

  log  [14:53:16.036] [info][status][plugin:kbn_vislib_vis_types] Status changed from uninitialized to green – Ready

  log  [14:53:16.046] [info][status][plugin:markdown_vis] Status changed from uninitialized to green – Ready

  log  [14:53:16.052] [info][status][plugin:metric_vis] Status changed from uninitialized to green – Ready

  log  [14:53:16.064] [info][status][plugin:spyModes] Status changed from uninitialized to green – Ready

  log  [14:53:16.068] [info][status][plugin:statusPage] Status changed from uninitialized to green – Ready

  log  [14:53:16.072] [info][status][plugin:elasticsearch] Status changed from yellow to green – Kibana index ready

  log  [14:53:16.075] [info][status][plugin:table_vis] Status changed from uninitialized to green – Ready

  log  [14:53:16.084] [info][listening] Server running at http://192.168.121.62:5601

./bin/kibana

之后打开界面 http://192.168.121.62:5601/status  如下,E:\u\elk\pic\03.png:

ELK 实时日志分析平台部署搭建详细实现过程

4.7、配置kibana

为了后续使用 Kibana,需要配置至少一个 Index 名字或者 Pattern,它用于在分析时确定 ES 中的 Index。这里我输入之前配置的 Index 名字 applog,Kibana 会自动加载该 Index 下 doc 的 field,并自动选择合适的 field 用于图标中的时间字段:

再打开 http://192.168.121.62:5601/app/kibana,输入 applog,会自动弹出如下界面,然后点击“create”按钮保存下,如下图 E:\u\elk\pic\09.png 所示:

ELK 实时日志分析平台部署搭建详细实现过程

创建完成后,自动弹出成功界面,如下图 E:\u\elk\pic\10.png 所示:

ELK 实时日志分析平台部署搭建详细实现过程

4.8kibana生成图表

选择左上角的“Discover”,然后再选择右上角的“List 15 minutes”(如果右上角默认的时间查询没有数据,就需要手动调整查询时间了),如下图 E:\u\elk\pic\12.png 所示:

ELK 实时日志分析平台部署搭建详细实现过程

这里为了看到数据信息,所以保守的选择了“Today”,然后会看到今天的记录,也即是看到的 elas 中的数据记录了,如下图 E:\u\elk\pic\13.png 所示:

ELK 实时日志分析平台部署搭建详细实现过程

在输入框里面,输入 info 字样,点击搜索按钮搜索,可以看到搜索匹配的信息如下 E:\u\elk\pic\14.png:

 ELK 实时日志分析平台部署搭建详细实现过程

点击右上角的“Save Search”按钮,就会保存此次的 search 结果,如下图 E:\u\elk\pic\16.png 所示:

ELK 实时日志分析平台部署搭建详细实现过程 

接下来去 Visualize 页面,点击新建一个柱状图(Vertical Bar Chart),然后选择刚刚保存的查询search_logs_save_1,如下图E:\u\elk\pic\17.png 所示:

 ELK 实时日志分析平台部署搭建详细实现过程

 

 

之后进入左边选择 x 轴为 Date Histogram 时间轴,显示为时分,间隔为 Auto 自动间隔,然后点击绿色的三角形按钮“Apply Changes”,kibana将生成类似于下图的柱状图,如下图 E:\u\elk\pic\18.png 所示:

 ELK 实时日志分析平台部署搭建详细实现过程

然后点击右边的保存按钮“Save Visualization”,可以保存此图为 search_log_visual_1,如下图 E:\u\elk\pic\19.png 所示:

ELK 实时日志分析平台部署搭建详细实现过程

然后进入“Dashboard”界面,点击下面的灰色背景的“+”按钮,如下图 E:\u\elk\pic\20.png 所示:

ELK 实时日志分析平台部署搭建详细实现过程

 

然后选择我们刚才保存的 visual 图,就会展示出来上次我们生成的图表记录,面板上就会显示出原来的图表,如下图 E:\u\elk\pic\21.png 所示:

ELK 实时日志分析平台部署搭建详细实现过程

如果有较多数据,我们可以根据业务需求和关注点在 Dashboard 页面添加多个图表:柱形图,折线图,地图,饼图等等。当然,我们可以设置更新频率,让图表自动更新,如下图 E:\u\elk\pic\22.png 所示:

ELK 实时日志分析平台部署搭建详细实现过程

当然如果设置的时间比较紧凑,比较短暂的话,其实就相当于实时分析的图表了,类似于 zabbix 的监控图了。

OK,最基本的 elk 平台部署和调试的流程就走完了,接下来就是各种业务场景的使用了。

5、一些错误记录

(1)start 问题

[elk@hch_test_dbm1_121_62 elasticsearch-2.3.4]$ ./bin/elasticsearch &

[1] 20726

[elk@hch_test_dbm1_121_62 elasticsearch-2.3.4]$ Exception in thread “main” SettingsException[Failed to load settings from [elasticsearch.yml]]; nested: ElasticsearchParseException[malformed, expected settings to start with ‘object’, instead was [VALUE_STRING]];

Likely root cause: ElasticsearchParseException[malformed, expected settings to start with ‘object’, instead was [VALUE_STRING]]

        at org.elasticsearch.common.settings.loader.XContentSettingsLoader.load(XContentSettingsLoader.java:65)

        at org.elasticsearch.common.settings.loader.XContentSettingsLoader.load(XContentSettingsLoader.java:45)

        at org.elasticsearch.common.settings.loader.YamlSettingsLoader.load(YamlSettingsLoader.java:46)

        at org.elasticsearch.common.settings.Settings$Builder.loadFromStream(Settings.java:1080)

        at org.elasticsearch.common.settings.Settings$Builder.loadFromPath(Settings.java:1067)

        at org.elasticsearch.node.internal.InternalSettingsPreparer.prepareEnvironment(InternalSettingsPreparer.java:88)

        at org.elasticsearch.common.cli.CliTool.<init>(CliTool.java:107)

        at org.elasticsearch.common.cli.CliTool.<init>(CliTool.java:100)

        at org.elasticsearch.bootstrap.BootstrapCLIParser.<init>(BootstrapCLIParser.java:48)

        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:226)

        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35)

Refer to the log for complete error details.

[1]+  Exit 1                  ./bin/elasticsearch

[elk@hch_test_dbm1_121_62 elasticsearch-2.3.4]$

原因是:配置文件中的 = 要换成:

[elk@hch_test_dbm1_121_62 elasticsearch-2.3.4]$ more config/elasticsearch.yml  |grep -v “#”

cluster.name: es_cluster

node.name: node0

path.data: /home/elk/data

path.logs: /home/elk/logs

network.host: 192.168.121.62

network.port: 9200

[elk@hch_test_dbm1_121_62 elasticsearch-2.3.4]$

(2)、Unable to fetch mapping.

Unable to fetch mapping. Do you haveindices matching the pattern?

这就说明 logstash没有把日志写入到 elasticsearch。

解决方法:

检查 logstash与 elasticsearch 之间的通讯是否有问题,一般问题就在这。

(3)、log4j 报错

log4j:WARN No appenders could be foundfor logger (com.demo.elk.Application).

log4j:WARN Please initialize the log4jsystem properly.

log4j:WARN Seehttp://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

解决:

(a)jdk 版本比较低,需要 jdk1.7 以上

(b)java 类和 log4j.properties 没有匹配上,在测试中需要将 java 类和 log4j.properties 放在一个目录上。

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-09/135137.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计13512字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中