首页 > 代码库 > elk 安装于配置

elk 安装于配置

ELK日志分析之安装

1.介绍:

  • 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来监控分片大小。
  •  索引和类型的解释:

技术分享

 

  • ELK的含义:

E: elasticsearch

  ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。

  也就是将logstach收集上来的日志储存,建立索引(便于查找),搜索(提供web展示)

l:logstash

  收集日志

  数据源:各种log,文本,session,silk,snmp

k:kibana

  数据展示,web页面,可视化

  可以完成批量分析

  数据集之间关联

  产生图表

  报警 (python / R 语言 )

  ES python api的文档

  python api http://elasticsearch-py.readthedocs.io/en/master/
  大量的查询或者过滤选项可以使用json 语法:
  任何周期都能查询

 

  •  ELK 关系:
LEK : logstatsh 收集日志,存到elasticserach (存储,产生索引,搜索) 到kibana展现(view)
 
 

2.安装

1、下载tar包直接解压(灵活)

2、配置yum源直接安装(方便)

服务器部署:

logstatsh : 部署在想收集日志的服务器上。

elasticsearch:主要是用于数据收集,索引,搜索提供展示,随意安装在那台服务器上都可以,重要的是es支持分布式,而且再大规模的日志分析中必须做分布式集群。这样可以跨节点索引和搜索。提高吞吐量与计算能力。

kibana:数据展示,部署在任意服务器上。

 

这里我们做实验使用的是两台服务器

node1.wawa.com : 192.168.31.179
node2.wawa.com : 192.168.31.205

a、准备环境:

  配置hosts两台服务器网络通畅  

  node1 安装es,node2安装es 做成集群,后期可能还会用到redis,redis提供的功能相当于kafka,收集logstatsh发来的数据,es从redis中提取数据。

  node1 安装kibana 做数据展示

  node2 安装logstatsh 做数据收集

  创建  elasticsearch 用户

b、安装:

  由于es logstatsh kibana基于java 开发,所以安装jdk ,jdk版本不要过低,否则会提醒升级jdk。

安装elasticsearch(node1,node2全都安装es)

下载并安装GPG key

[root@linux-node1 ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

添加yum仓库 

[root@linux-node2 ~]# vim /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

安装elasticsearch

[root@hadoop-node2 ~]# yum install -y elasticsearch

  

  • 下载tar包安装,更简单,解压即可运行,只不过没有yum安装提供的启动脚本

安装kibana(这里使用的tar包安装,es、log tar包方法一样)

[root@linux-node2 ~]#cd /usr/local/src
[root@linux-node2 ~]#wget https://download.elastic.co/kibana/kibana/kibana-4.3.1-linux-x64.tar.gz
tar zxf kibana-4.3.1-linux-x64.tar.gz
[root@linux-node1 src]# mv kibana-4.3.1-linux-x64 /usr/local/
[root@linux-node2 src]# ln -s /usr/local/kibana-4.3.1-linux-x64/ /usr/local/kibana

 

安装logstatsh (node2安装)

下载并安装GPG key

[root@linux-node2 ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch 

添加yum仓库  

[root@linux-node2 ~]# vim /etc/yum.repos.d/logstash.repo
[logstash-2.1]
name=Logstash repository for 2.1.x packages
baseurl=http://packages.elastic.co/logstash/2.1/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1 

安装logstash  

[root@linux-node2 ~]# yum install -y logstash

  

c、配置管理elasticsearch

[root@linux-node1 src]# grep -n ‘^[a-Z]‘ /etc/elasticsearch/elasticsearch.yml 
17:cluster.name: chuck-cluster  判别节点是否是统一集群,多台统一集群的es名称要一致
23:node.name: linux-node1 节点的hostname
33:path.data: /data/es-data 数据存放路径
37:path.logs: /var/log/elasticsearch/ 日志路径
43:bootstrap.mlockall: true  锁住内存,使内存不会再swap中使用
54:network.host: 0.0.0.0  允许访问的ip
58:http.port: 9200  端口
[root@linux-node1 ~]# mkdir -p /data/es-data
[root@linux-node1 src]# chown  elasticsearch.elasticsearch /data/es-data/

  

d、启动 elasticsearch

[root@node2 ~]# /etc/init.d/elasticsearch status
elasticsearch (pid  23485) 正在运行...
You have new mail in /var/spool/mail/root
[root@node2 ~]# ps aux| grep elasticsearch
505      23485  2.1 53.1 2561964 264616 ?      Sl   17:09   6:07 /usr/bin/java -Xms256m -Xmx1g -Djava.awt.headless=true -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError -XX:+DisableExplicitGC -Dfile.encoding=UTF-8 -Djna.nosys=true -Des.path.home=/usr/share/elasticsearch -cp /usr/share/elasticsearch/lib/elasticsearch-2.4.2.jar:/usr/share/elasticsearch/lib/* org.elasticsearch.bootstrap.Elasticsearch start -p /var/run/elasticsearch/elasticsearch.pid -d -Des.default.path.home=/usr/share/elasticsearch -Des.default.path.logs=/var/log/elasticsearch -Des.default.path.data=http://www.mamicode.com/var/lib/elasticsearch -Des.default.path.conf=/etc/elasticsearch"java",23485,132))
tcp    LISTEN     0      50                    :::9300                 :::*      users:(("java",23485,89))

 

e、测试

技术分享

交互方式:

交互的两种方法

  • Java API : 
    node client 
    Transport client
  • RESTful API 
    Javascript 
    .NET 
    php 
    Perl 
    Python 
    Ruby
  •  ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。

 1、我们使用RESTful web接口

[root@linux-node1 src]# curl -i -XGET ‘http://192.168.56.11:9200/_count?pretty‘ -d ‘{
"query" {   #查询
     "match_all": {}   #所有信息
}
}‘

HTTP/1.1 200 OK Content-Type: application/json; charset=UTF-8 Content-Length: 95 { "count" : 0, 索引0个 "_shards" : { 分区0个 "total" : 0, "successful" : 0, 成功0个 "failed" : 0 失败0个 } }

  

2、使用es 强大的插件  : head插件显示索引和分片情况

f、安装插件

[root@linux-node1 src]# /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head
[root@linux-node1 src]# /usr/share/elasticsearch/bin/plugin list 可以查看当前已经安装的插件

 技术分享

 

访问刚刚安装的head插件

http://192.168.31.179:9200/_plugin/head/

  

技术分享

 

添加数据测试

 技术分享

 

 

  技术分享

 

node2安装好以后配置集群模式

[root@node1 src]# scp /etc/elasticsearch/elasticsearch.yml 192.168.56.12:/etc/elasticsearch/elasticsearch.yml
[root@node2 elasticsearch]# sed -i ‘23s#node.name: linux-node1#node.name: linux-node2#g‘ elasticsearch.yml 
[root@node2 elasticsearch]# mkdir -p /data/es-data
[root@node2 elasticsearch]# chown elasticsearch.elasticsearch /data/es-data/

 

node1与node2中都配置上(单播模式,听说还有组播默认,可以尝试一下)

[root@linux-node1 ~]# grep -n "^discovery" /etc/elasticsearch/elasticsearch.yml 
79:discovery.zen.ping.unicast.hosts: ["linux-node1", "linux-node2"]
[root@linux-node1 ~]# systemctl restart elasticsearch.service

  在浏览器中查看分片信息,一个索引默认被分成了5个分片,每份数据被分成了五个分片(可以调节分片数量),下图中外围带绿色框的为主分片,不带框的为副本分片,主分片丢失,副本分片会复制一份成为主分片,起到了高可用的作用,主副分片也可以使用负载均衡加快查询速度,但是如果主副本分片都丢失,则索引就是彻底丢失。 

技术分享

 

使用kopf插件监控elasticsearch

 

elk 安装于配置