设为首页 收藏本站

运维网

查看: 901|回复: 1

[经验分享] ELK部署和过程中的报错汇总

[复制链接]

尚未签到

发表于 2017-11-14 10:56:09 | 显示全部楼层 |阅读模式
一、ELK介绍1.1 elasticsearch1.1.1 elasticsearch介绍
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
1.1.2 elasticsearch几个重要术语
  • NRT
    elasticsearch是一个近似实时的搜索平台,从索引文档到可搜索有些延迟,通常为1秒。
  • 集群
    集群就是一个或多个节点存储数据,其中一个节点为主节点,这个主节点是可以通过选举产生的,并提供跨节点的联合索引和搜索的功能。集群有一个唯一性标示的名字,默认是elasticsearch,集群名字很重要,每个节点是基于集群名字加入到其集群中的。因此,确保在不同环境中使用不同的集群名字。一个集群可以只有一个节点。强烈建议在配置elasticsearch时,配置成集群模式。
  • 节点
    节点就是一台单一的服务器,是集群的一部分,存储数据并参与集群的索引和搜索功能。像集群一样,节点也是通过名字来标识,默认是在节点启动时随机分配的字符名。当然啦,你可以自己定义。该名字也蛮重要的,在集群中用于识别服务器对应的节点。
    节点可以通过指定集群名字来加入到集群中。默认情况下,每个节点被设置成加入到elasticsearch集群。如果启动了多个节点,假设能自动发现对方,他们将会自动组建一个名为elasticsearch的集群。
  • 索引
    索引是有几分相似属性的一系列文档的集合。如nginx日志索引、syslog索引等等。索引是由名字标识,名字必须全部小写。这个名字用来进行索引、搜索、更新和删除文档的操作。
    索引相对于关系型数据库的库。
  • 类型
    在一个索引中,可以定义一个或多个类型。类型是一个逻辑类别还是分区完全取决于你。通常情况下,一个类型被定于成具有一组共同字段的文档。如ttlsa运维生成时间所有的数据存入在一个单一的名为logstash-ttlsa的索引中,同时,定义了用户数据类型,帖子数据类型和评论类型。
    类型相对于关系型数据库的表。
  • 文档
    文档是信息的基本单元,可以被索引的。文档是以JSON格式表现的。
    在类型中,可以根据需求存储多个文档。
    虽然一个文档在物理上位于一个索引,实际上一个文档必须在一个索引内被索引和分配一个类型。
    文档相对于关系型数据库的列。
  • 分片和副本
    在实际情况下,索引存储的数据可能超过单个节点的硬件限制。如一个十亿文档需1TB空间可能不适合存储在单个节点的磁盘上,或者从单个节点搜索请求太慢了。为了解决这个问题,elasticsearch提供将索引分成多个分片的功能。当在创建索引时,可以定义想要分片的数量。每一个分片就是一个全功能的独立的索引,可以位于集群中任何节点上。
    分片的两个最主要原因:
    a、水平分割扩展,增大存储量
    b、分布式并行跨分片操作,提高性能和吞吐量
    分布式分片的机制和搜索请求的文档如何汇总完全是有elasticsearch控制的,这些对用户而言是透明的。
    网络问题等等其它问题可以在任何时候不期而至,为了健壮性,强烈建议要有一个故障切换机制,无论何种故障以防止分片或者节点不可用。
    为此,elasticsearch让我们将索引分片复制一份或多份,称之为分片副本或副本。
    副本也有两个最主要原因:
    高可用性,以应对分片或者节点故障。出于这个原因,分片副本要在不同的节点上。
    提供性能,增大吞吐量,搜索可以并行在所有副本上执行。
    总之,每一个索引可以被分成多个分片。索引也可以有0个或多个副本。复制后,每个索引都有主分片(母分片)和复制分片(复制于母分片)。分片和副本数量可以在每个索引被创建时定义。索引创建后,可以在任何时候动态的更改副本数量,但是,不能改变分片数。
    默认情况下,elasticsearch为每个索引分片5个主分片和1个副本,这就意味着集群至少需要2个节点。索引将会有5个主分片和5个副本(1个完整副本),每个索引总共有10个分片。
    每个elasticsearch分片是一个Lucene索引。一个单个Lucene索引有最大的文档数LUCENE-5843, 文档数限制为2147483519(MAX_VALUE – 128)。 可通过_cat/shards来监控分片大小。

1.2 logstash1.2.1 logstash 介绍
LogStash由JRuby语言编写,基于消息(message-based)的简单架构,并运行在Java虚拟机(JVM)上。不同于分离的代理端(agent)或主机端(server),LogStash可配置单一的代理端(agent)与其它开源软件结合,以实现不同的功能。
1.2.2 logStash的四大组件
  • Shipper:发送事件(events)至LogStash;通常,远程代理端(agent)只需要运行这个组件即可;
  • Broker and Indexer:接收并索引化事件;
  • Search and Storage:允许对事件进行搜索和存储;
  • Web Interface:基于Web的展示界面
    正是由于以上组件在LogStash架构中可独立部署,才提供了更好的集群扩展性。

1.2.2 LogStash主机分类
  • 代理主机(agent host):作为事件的传递者(shipper),将各种日志数据发送至中心主机;只需运行Logstash 代理(agent)程序;
  • 中心主机(central host):可运行包括中间转发器(Broker)、索引器(Indexer)、搜索和存储器(Search and Storage)、Web界面端(Web Interface)在内的各个组件,以实现对日志数据的接收、处理和存储。

1.3 kibana
Logstash是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索),您可以使用它。说到搜索,logstash带有一个web界面,搜索和展示所有日志。
二、使用ELK必要性(解决运维痛点)
  • 开发人员不能登录线上服务器查看详细日志
  • 各个系统都有日志,日至数据分散难以查找
  • 日志数据量大,查询速度慢,或者数据不够实时

三、elk部署之环境准备
3.1 /etc/security/limits.conf相关配置
1
2
3
4
5
6
* soft nofile 65536
* hard nofile 65536
* soft nproc 2048
* hard nproc 4096
* soft memlock unlimited
* hard memlock unlimited




3.1.1 /etc/security/limits.d/90-nproc.conf
1
*          soft    nproc     2048



注:这步不配elasticsearch会出现错误信息:[1]: max number of threads [1024] for user [elk] is too low, increase to at least [2048]

3.2 /etc/sysctl.conf配置
1
vm.max_map_count=655360




3.3使更改生效
1
sysctl -p




3.4 创建运行elk的用户
1
useradd elk;passwd elk




3.5 创建elk的运行目录及权限配置
1
2
mkdir -p /usr/local/elk-plf
chown -R elk.elk /usr/local/elk-plf




四、elk部署安装自行官网下载elk的安装包

4.1 安装elasticsearch
1
tar -zxvf elasticsearch-5.4.3.tar.gz -C /usr/local/elk-plf/




4.1.1 配置elasticsearch配置文件
1
echo -e "cluster.name: test-cluster\nnode.name: test-node1\npath.data: /usr/local/elk-plf/elasticsearch-5.4.3/data\npath.logs: /usr/local/elk-plf/elasticsearch-5.4.3/logs\nbootstrap.memory_lock: true\nbootstrap.system_call_filter: false\nnetwork.host: 192.168.12.156\nhttp.port: 9200\nhttp.cors.enabled: true\nhttp.cors.allow-origin: "*"" >> /usr/local/elk-plf/elasticsearch-5.4.3/config/elasticsearch.yml




配置结果
1
2
3
4
5
6
7
8
9
10
11
[iyunv@test-node1 local]# grep "^[a-Z]" /usr/local/elk-plf/elasticsearch-5.4.3/config/elasticsearch.yml
cluster.name: test-cluster
node.name: test-node1
path.data: /usr/local/elk-plf/elasticsearch-5.4.3/data
path.logs: /usr/local/elk-plf/elasticsearch-5.4.3/logs
bootstrap.memory_lock: true
bootstrap.system_call_filter: false
network.host: 192.168.12.156
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"




4.1.2配置elasticsearch的内存分配(注意,内存配置太大可能会启动不了,报GC错误)
1
vim /usr/local/elk-plf/elasticsearch-5.4.3/config/jvm.options



1
2
-Xms512m
-Xmx512m




4.1.3 配置elasticsearch的JAVA_HOME  (我的系统jdk是1.7,所以给es单独配置jdk1.8)
1
2
3
[iyunv@qd-cs_rs-console01-bj elk-plf]# vim elasticsearch-5.4.3/bin/elasticsearch
JAVA_HOME=/usr/local/jdk1.8.0_60
JRE_HOME=/usr/local/jdk1.8.0_60/jre



在文件上方添加JAVA_HOME和JRE_HOME保存退出


4.1.4 启动elasticsearch
1
2
[iyunv@qd-cs_rs-console01-bj elk-plf]# su elk
[elk@qd-cs_rs-console01-bj elk-plf]$ elasticsearch-5.4.3/bin/elasticsearch -d








4.1.5 安装elasticsearch插件head1、 安装nodejs          注意:由于head插件本质上还是一个nodejs的工程,因此需要安装node,使用npm来安装依赖的包。(npm可以理解为maven)
1
2
wget
tar -zxvf node-v4.4.7-linux-x64.tar.gz -C /usr/local/elk5/



2、 配置node的环境变量
1
2
3
4
5
6
7
8
[iyunv@qd-cs_rs-console01-bj src]# vim /etc/profile.d/npm.sh
#!/bin/bash
export NODE_HOME=/usr/local/elk-plf/node-v4.4.7-linux-x64
export PATH=$NODE_HOME/bin:$PATH

[iyunv@qd-cs_rs-console01-bj src]# source /etc/profile.d/npm.sh
[iyunv@qd-cs_rs-console01-bj src]# node -v
[iyunv@qd-cs_rs-console01-bj src]# npm -v



3、 安装grunt    (grunt是一个很方便的构建工具,可以进行打包压缩、测试、执行等等的工作,5.0里的head插件就是通过grunt启动的。因此需要安装一下grunt)
1
2
3
4
5
[iyunv@qd-cs_rs-console01-bj elk5]# wget https://github.com/mobz/elasticsearch-head/archive/master.zip
[iyunv@qd-cs_rs-console01-bj elk5]# unzip master.zip
[iyunv@qd-cs_rs-console01-bj elk5]# cd elasticsearch-head-master/
[iyunv@qd-cs_rs-console01-bj elasticsearch-head-master]# npm install -g grunt-cli
[iyunv@qd-cs_rs-console01-bj elasticsearch-head-master]# npm install




4、修改head配置文件 (添加本机的id地址)
1
2
3
4
5
6
7
8
9
10
11
[iyunv@qd-cs_rs-console01-bj elasticsearch-head-master]# vim Gruntfile.js
connect: {
                        server: {
                                options: {
                                        hostname: '192.168.12.156',
                                        port: 9100,
                                        base: '.',
                                        keepalive: true
                                }
                        }
                }



添加hostname属性

5、 修改elasticsearch的ip地址
1
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.12.156:9200";




6、 启动head (要进入head目录中启动)
1
[iyunv@qd-cs_rs-console01-bj elasticsearch-head-master]# grunt server



a1742d127175af1bf3362f9f651a38d1.jpg-wh_500x0-wm_3-wmp_4-s_3516194964.jpg

7、 elasticsearch安装启动过程中遇到的问题Q:Caused by: java.lang.RuntimeException: can not run elasticsearch as root
A:elasticsearch不允许使用root启动,因此我们要解决这个问题需要新建一个用户来启动elasticsearch

Q: java.security.AccessControlException:accessdenied("javax.management.MBeanTrustPermission""register")
A: 权限问题,给elasticsearch的安装目录相应的用户权限

Q:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
A:文件描述符限制,如果配置了上面的limit.conf就不会出现这个错误

Q:max number of threads [1024] for user [elsearch] is too low, increase to at least [2048]
A:配置/etc/security/limit.d/90-nproc.conf,添加*  soft   nproc   2048

Q:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least
A:配置/etc/sysctl.conf,添加vm.max_map_count = 655360

Q:system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
A:这是在因为操作系统不支持SecComp,而ES5.4.1默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动。在elasticsearch.yml中配置bootstrap.system_call_filter为false,注意要在bootstrap.memory_lock:  false下面配置

还有一些其他的错误,由于安装时没有记录。以后有了再补上吧

4.2 安装logstash4.2.1 简介            Logstash是一个接收,处理,转发日志的工具。支持系统日志,webserver日志,错误日志,应用日志,总之包括所有可以抛出来的日志类型。怎么样听起来挺厉害的吧?
在一个典型的使用场景下(ELK):用Elasticsearch作为后台数据的存储,kibana用来前端的报表展示。Logstash在其过程中担任搬运工的角色,它为数据存储,报表查询和日志解析创建了一个功能强大的管道链。Logstash提供了多种多样的 input,filters,codecs和output组件,让使用者轻松实现强大的功能。好了让我们开始吧
4.2.2 安装
1
[iyunv@qd-cs_rs-console01-bj src]# tar -zxvf logstash-all-plugins-2.4.0.tar.gz -C /usr/local/elk-plf/




4.2.3 启动
1
2
3
4
5
[iyunv@qd-cs_rs-console01-bj src]# /usr/local/logstash-2.4.0/bin/logstash -e 'input { stdin{} } output { stdout{} }'                                          
Settings: Default pipeline workers: 4
Pipeline main started
hello                                            ===> 输入
2017-11-10T17:17:03.314Z test-node1 hello        ===> 输出




4.2.4 logstash输出到elasticsearch
1
2
3
[iyunv@test-node1 local]# /usr/local/logstash-2.4.0/bin/logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["192.168.12.156:9200"] } }'
Settings: Default pipeline workers: 4
Pipeline main started



1eabf6c145b0b10456e579f6a0b2ba0a.jpg-wh_500x0-wm_3-wmp_4-s_796558147.jpg

10c0d5d19148d74974d527037ecbfad5.jpg-wh_500x0-wm_3-wmp_4-s_4178948895.jpg

上图中在logstash输入的信息已经到了elasticsearch中,并可以查询到。

4.3 安装kibana显示elasticsearch中的数据

4.3.1 简介

            Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看、交互存放在Elasticsearch索引里的数据,使用各种不同的图表、表格、地图等kibana能够很轻易地展示高级数据分析与可视化。
         Kibana让我们理解大量数据变得很容易。它简单、基于浏览器的接口使你能快速创建和分享实时展现Elasticsearch查询变化的动态仪表盘。安装Kibana非常快,你可以在几分钟之内安装和开始探索你的Elasticsearch索引数据—-—-不需要写任何代码,没有其他基础软件依赖。

4.3.2 安装kibana
1
2
[iyunv@qd-cs_rs-console01-bj src]# tar -zxvf kibana-5.4.3-linux-x86_64.tar.gz -C /usr/local/elk-plf/
[iyunv@qd-cs_rs-console01-bj src]# cd /usr/local/elk-plf/kibana-5.4.3-linux-x86_64/




4.3.3 配置kibana
1
2
3
4
5
6
7
8
9
[iyunv@qd-cs_rs-console01-bj kibana-5.4.3-linux-x86_64]# cat config/kibana.yml |grep "^[a-Z]"
server.port: 5601
server.host: "192.168.12.156"
elasticsearch.url: "http://192.168.12.156:9200"
kibana.index: ".kibana"
kibana.defaultAppId: "discover"
elasticsearch.pingTimeout: 1500
elasticsearch.requestTimeout: 30000
elasticsearch.startupTimeout: 5000




4.3.4 启动kibana
1
2
3
4
5
6
7
8
9
[iyunv@test-node1 kibana-5.4.3-linux-x86_64]# ./bin/kibana        
  log   [17:37:45.712] [info][status][plugin:kibana@5.4.3] Status changed from uninitialized to green - Ready
  log   [17:37:45.881] [info][status][plugin:elasticsearch@5.4.3] Status changed from uninitialized to yellow - Waiting for Elasticsearch
  log   [17:37:45.950] [info][status][plugin:console@5.4.3] Status changed from uninitialized to green - Ready
  log   [17:37:45.986] [info][status][plugin:metrics@5.4.3] Status changed from uninitialized to green - Ready
  log   [17:37:46.033] [info][status][plugin:elasticsearch@5.4.3] Status changed from yellow to green - Kibana index ready
  log   [17:37:46.327] [info][status][plugin:timelion@5.4.3] Status changed from uninitialized to green - Ready
  log   [17:37:46.339] [info][listening] Server running at http://192.168.12.156:5601
  log   [17:37:46.348] [info][status][ui settings] Status changed from uninitialized to green - Ready




1bb93df263479dcf8c2da6ab60c49838.jpg-wh_500x0-wm_3-wmp_4-s_478076343.jpg

4.3.5 配置kibana索引
653315d61c2ae267d1d2a2d2102d768a.jpg-wh_500x0-wm_3-wmp_4-s_3407712154.jpg
经过上面的步骤,elk就全部装好了。下面用elk来监控catalina日志


五、配置elk监控tomcat的catalina日志
5.1 logstash配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[iyunv@qd-cs_rs-console01-bj src]# cd /usr/local/logstash-2.4.0/
[iyunv@qd-cs_rs-console01-bj logstash-2.4.0]# vim conf/tomcat.conf
input {
     file {
        path => ["/opt/tomcat-msm/logs/catalina.out"]
        start_position => "beginning"
     }
}

filter {
      date {
         match => [ "timestamp" , "YYYY-MM-dd HH:mm:ss" ]
      }
}

output {
       elasticsearch {
          hosts => ["192.168.12.156:9200"]
       }
}




5.1.2 以配置文件的方式启动logstash
1
2
3
[iyunv@qd-cs_rs-console01-bj logstash-2.4.0]# bin/logstash -f conf/tomcat.conf
Settings: Default pipeline workers: 4
Pipeline main started




5.2、登录kibana查看日志
b25bfc51d9c63d71b6fadec8c236520a.jpg-wh_500x0-wm_3-wmp_4-s_3740538162.jpg


运维网声明 1、欢迎大家加入本站运维交流群:群①:263444886群②:197202523群③:485755530群④:201730672群⑤:202807635运维网交流群⑥:281548029
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须注明原文的出处
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、运维网 - 服务您的运维操作管理专家!
6、联系人Email:admin@yunvn.com 网址:www.iyunv.com

点击关注更多内容
累计签到:146 天
连续签到:1 天
发表于 2018-3-19 17:50:31 | 显示全部楼层
66666666666666

运维网声明 1、欢迎大家加入本站运维交流群:群①:263444886群②:197202523群③:485755530群④:201730672群⑤:202807635运维网交流群⑥:281548029
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须注明原文的出处
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、运维网 - 服务您的运维操作管理专家!
6、联系人Email:admin@yunvn.com 网址:www.iyunv.com

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则  允许回帖邮件提醒楼主

关注运维网官方微信X

关注运维网官方微信

扫描二维码关注运维网官方微信,最新一手资源尽在官方微信!快快关注我们吧...

扫描微信二维码查看详情

客服 E-mail:kefu@yunvn.com

本站由青云提供云计算服务

运维网--中国最专业的运维工程师交流社区

京ICP备14039699号-1 Copyright © 2012-2018

使用手机软件扫描微信二维码

关注我们可获取更多热点资讯

Good good study day day up !


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


独家合作伙伴: 青云cloud

快速回复 返回顶部 返回列表