转载(ELK配置)

1、ELK平台介绍

在搜索ELK资料的时候,发现这篇文章比较好,于是摘抄一小段:以下内容来自:http://baidu.blog.51cto.com/71938/1676798

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

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

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

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

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

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以上版本不低于Java1.7,因此推荐使用最新版本的Java。因为我们只需要Java的运行环境,所以可以只安装JRE,不过这里我依然使用JDK,请自行搜索安装,我这里准备使用1.7

3、下载

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

从中获得下载地址:

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

wgethttps://download.elastic.co/logstash/logstash/logstash-2.3.4.tar.gz

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

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

百度云:软件和head插件(http://pan.baidu.com/s/1mhVcc0w)

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

备注:插件的下载安装方式从https://github.com/mobz/elasticsearch-head下载ZIP包。

elasticsearch目录下创建目录/plugins/head/并且将刚刚解压的elasticsearch-head-master目录下所有内容COPY到当前创建的/plugins/head/目录下即可,然后重启elasticsearch.

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

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

4.3、安装logstash

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

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

安装配置:

#解压缩安装

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.4、elk3测试工程

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

(1)Application.java

packagecom.demo.elk;

importorg.apache.log4j.Logger;

publicclassApplication {

privatestaticfinalLoggerLOGGER= Logger.getLogger(Application.class);

publicApplication() {

//TODOAuto-generated constructor stub

}

publicstaticvoidmain(String[] args) {

//TODOAuto-generated method stub

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

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

try{

Thread.sleep(500);

}catch(InterruptedException e) {

//TODOAuto-generated catchblockl

e.printStackTrace();

}

}

}

}

(2)Pom.xml:

"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">

4.0.0

elk3

elk3

0.0.1-SNAPSHOT

elk3

log4j

log4j

1.2.17

(3)log4j.properties

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

Log4j.properties文件:

log4j.rootLogger=DEBUG, socket

# 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.5、eclipse调试结果

(1)eclipse查看调试结果

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

(2)去Elasticsearch的head界面查看效果

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

其中:

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

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

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

(3)去Elasticsearch的brower界面查看效果

备注:记得自己添加一个.kibana的索引.要不然安装kibana时报错

点击索引,在点击新建索引即可

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

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

查询 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所示

PS总结:上面列出的都是单个ES的head界面组件查看到的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:

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所示:

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

4.8、kibana生成图表

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

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

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

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

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

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

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

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

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

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

当然如果设置的时间比较紧凑,比较短暂的话,其实就相当于实时分析的图表了,类似于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.(CliTool.java:107)

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

at org.elasticsearch.bootstrap.BootstrapCLIParser.(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放在一个目录上。

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

推荐阅读更多精彩内容