ELK

ELK 是一套开源的日志分析系统,由ElasticSearch+Logstach+Kibana组成

Elasticsearch:分布式存储及全文检索

Logstach:日志收集与过滤

Kibana:图形化展示

官网: https://www.elastic.co/cn/

一、概述

二、Elastic Search

Elasticsearch 是一个分布式的RESTful 风格的搜索和数据分析引擎

实时分析 , 高可用性,易扩展,支持集群(Cluster)、分片和复制(ShardsReplicas

实例:Github 搜索

更多: https://www.elastic.co/cn/products/elasticsearch

0.相关概念

1)Cluster:集群。
ES可以作为一个独立的单个搜索服务器。不过,为了处理大型数据集,实现容错和高可用性,ES可以运行在许多互相合作的服务器上。这些服务器的集合称为集群。

2)Node:节点。
形成集群的每个服务器称为节点。

3)Shard:分片。
当有大量的文档时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够。这种情况下,数据可以分为较小的分片。每个分片放到不同的服务器上。
当你查询的索引分布在多个分片上时,ES会把查询发送给每个相关的分片,并将结果组合在一起,而应用程序并不知道分片的存在。即:这个过程对用户来说是透明的。

4)Replica:副本。
为提高查询吞吐量或实现高可用性,可以使用分片副本。
副本是一个分片的精确复制,每个分片可以有零个或多个副本。ES中可以有许多相同的分片,其中之一被选择更改索引操作,这种特殊的分片称为主分片。
当主分片丢失时,如:该分片所在的数据不可用时,集群将副本提升为新的主分片。

5)全文检索。
全文检索就是对一篇文章进行索引,可以根据关键字搜索,类似于mysql里的like语句。
全文索引就是把内容根据词的意义进行分词,然后分别创建索引,例如”你们的激情是因为什么事情来的” 可能会被分词成:“你们“,”激情“,“什么事情“,”来“ 等token,这样当你搜索“你们” 或者 “激情” 都会把这句搜出来。

出自: https://blog.csdn.net/laoyang360/article/details/52244917

1.安装

需要JDK环境

yum install java-1.8.0-openjdk

安装 Elastic Search

下载: https://www.elastic.co/cn/downloads/elasticsearch

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.2-x86_64.rpm
rpm -ivh elasticsearch-7.4.2-x86_64.rpm

2.配置

注意:每个配置项后有一个空格

vim /etc/elasticsearch/elasticsearch.yml

path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
#55行,开启监听所有
network.host: 0.0.0.0
#59行
http.port: 9200

3.启动

注意:启动需要一些时间

systemctl start elasticsearch
#查看是否启动成功
netstat -ntlup |grep java
# 9200端口是数据传输端口
# 9300端口是集群通信端口

日志:

cat  /var/log/elasticsearch/elasticsearch.log

查看状态:

curl http://10.1.1.82:9200/_cluster/health?pretty

4.集群配置

vim /etc/elasticsearch/elasticsearch.yml

Master

cluster.name: elk-cluster
#本机IP或者主机名
node.name: 10.1.1.82    
#指定为master节点(注意空格)
node.master: true                    
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
#集群所有节点IP
discovery.zen.ping.unicast.hosts: ["10.1.1.82", "10.1.1.85"]        

Slave

cluster.name: elk-cluster
#本机IP或者主机名
node.name: 10.1.1.85        
#指定为非master节点(注意空格)
node.master: false                    
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
#集群所有节点IP
discovery.zen.ping.unicast.hosts: ["10.1.1.82", "10.1.1.85"]    

重启服务

systemctl restart elasticsearch

集群配置注意事项:

①集群配置参数:

  • discovery.zen.ping.unicast.hostsElasticsearch默认使用Zen Discovery来做节点发现机制,推荐使用unicast来做通信方式,在该配置项中列举出Master节点。
  • discovery.zen.minimum_master_nodes,该参数表示集群中可工作的具有Master节点资格的最小数量,默认值是1。为了提高集群的可用性,避免脑裂现象。官方推荐设置为(N/2)+1,其中N是具有Master资格的节点的数量。
  • discovery.zen.ping_timeout,表示节点在发现过程中的等待时间,默认值是3秒,可以根据自身网络环境进行调整,一定程度上提供可用性。

②集群节点:

  • 节点类型主要包括Master节点和data节点。通过设置两个配置项node.masternode.data为true或false来决定将一个节点分配为什么类型的节点。
  • 尽量将Master节点和Data节点分开,通常Data节点负载较重,需要考虑单独部署。

③ 内存:

  • Elasticsearch默认设置的内存是1GB,对于任何一个业务部署来说,这个都太小了。通过指定ES_HEAP_SIZE环境变量,可以修改其堆内存大小,服务进程在启动时候会读取这个变量,并相应的设置堆的大小。建议设置系统内存的一半给Elasticsearch,但是不要超过32GB

④硬盘空间:

  • Elasticsearch默认将数据存储在/var/lib/elasticsearch路径下,随着数据的增长,一定会出现硬盘空间不够用的情形,大环境建议把分布式存储挂载到/var/lib/elasticsearch目录下以方便扩容。

配置参考文档: https://www.elastic.co/guide/en/elasticsearch/reference/index.html

5.使用

#1.查看ElasticSearch信息
curl http://10.1.1.82:9200/
#2.查看集群信息
curl http://10.1.1.82:9200/_cluster/health?pretty
#3.查看节点信息
curl http://10.1.1.82:9200/_cat/nodes?v

索引相关:

#1.查看索引信息
curl http://10.1.1.82:9200/_cat/indices?v
#2.添加索引
curl -X PUT http://10.1.1.82:9200/testindex
#3.删除索引
curl -X DELETE http://10.1.1.82:9200/testindex

6. elasticsearch-head安装

图形化管理工具,安装时需要安装Nodejs环境,或者直接使用Chrome插件的形式使用

使用前需要修改配置文件

(1)修改配置文件

vim /etc/elasticsearch/elasticsearch.yml
#最后加上这两句
http.cors.enabled: true
http.cors.allow-origin: "*"

重启服务:systemctl restart elasticsearch

(2)使用方式一:(推荐)

安装ES-headChrome插件:

https://chrome.google.com/webstore/detail/elasticsearch-head/ffmkiejjmecolpfloofpjologoblkegm/

(3)使用方式二:

下载: https://github.com/mobz/elasticsearch-head

下载Nodejs : https://nodejs.org/en/download/

#1.安装 Nodejs
tar -xf node-v10.15.0-linux-x64.tar.xz
mv node-v10.15.0-linux-x64 /usr/local/nodejs
ln -s /usr/local/nodejs/bin/npm  /usr/local/bin/npm
ln -s /usr/local/nodejs/bin/node  /usr/local/bin/node
#2.下载 elasticsearch-head
git clone git://github.com/mobz/elasticsearch-head.git
mv elasticsearch-head /usr/local/
cd /usr/local/elasticsearch-head/
#( 方法 一 )
#下载非常慢,建议采用方法二
#安装 node.js 项目构建工具 grunt
npm install -g grunt-cli
npm install
#(方法 二 )
npm install -g grunt-cli --registry=http://registry.npm.taobao.org
npm install --registry=http://registry.npm.taobao.org
#注意:下载 phantomjs 包时,会比较慢,可以考虑下载该软件包,并放到如下位置:
#/tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2

启动:

cd /usr/local/elasticsearch-head/
nohup npm run start &>nohup.out

三、Logstach

logstash是一个开源的数据采集工具,通过数据源采集数据.然后进行过滤,并自定义格式输出到目的地,logstash可以采集任何格式的数据

注意:logstach非常吃资源

更多: https://www.elastic.co/cn/products/logstash

1.安装

需要JDK环境

yum install java-1.8.0-openjdk

下载: https://www.elastic.co/cn/downloads/logstash

上传安装包并安装:

rpm -ivh logstash-6.5.2.rpm

2.配置

vim /etc/logstash/logstash.yml

path.data: /var/lib/logstash
#配置目录路径
path.config: /etc/logstash/conf.d/                    
#并改为本机IP
http.host: "10.1.1.13"                            
path.logs: /var/log/logstash

3.插件

input插件: 用于导入日志源

https://www.elastic.co/guide/en/logstash/current/input-plugins.html

output插件: 用于导出

https://www.elastic.co/guide/en/logstash/current/output-plugins.html

filter插件: 用于过滤

https://www.elastic.co/guide/en/logstash/current/filter-plugins.html

4.测试

#进入安装目录
cd /usr/share/logstash/bin
#测试
./logstash -e 'input {stdin {}} output {stdout {}}'

5.日志采集

(1)单个日志采集

收集/var/log/message日志

 vim /etc/logstash/conf.d/test.conf

编辑内容如下:

input {
    file {
        path => "/var/log/messages"
        start_position => "beginning"
    }
}

output {
    elasticsearch{
        hosts => ["10.1.1.82:9200"]
        index => "test-%{+YYYY.MM.dd}"
    }
}

开启日志收集:

cd /usr/share/logstash/bin

./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/test.conf &

(2)多个日志采集

收集/var/log/message/var/log/yum.log 日志

vim /etc/logstash/conf.d/test2.conf

编辑内容如下:

input {
  file {
    path => "/var/log/messages"
    start_position => "beginning"
    type => "messages"
    }

  file {
    path => "/var/log/yum.log"
    start_position => "beginning"
    type => "yum"
  }
}

output {

   if [type] == "messages" {
    elasticsearch {
        hosts => ["10.1.1.82:9200"]
        index => "message-%{+YYYY.MM.dd}"
      }
   }

   if [type] == "yum" {
    elasticsearch {
        hosts => ["10.1.1.12:8200"]
        index => "yum-%{+YYYY.MM.dd}"
    }
  }
}

开启

cd /usr/share/logstash/bin
./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/test2.conf &

6. filter

日志过滤,待补充

四、Kibana

图形化展示ElasticSearch数据,端口5601

1.安装

下载: https://www.elastic.co/cn/downloads/kibana

wget https://artifacts.elastic.co/downloads/kibana/kibana-6.5.2-x86_64.rpm
rpm -ivh kibana-6.5.2-x86_64.rpm 

2.配置

vim /etc/kibana/kibana.yml
#修改内容如下
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://10.1.1.82:9200"
logging.dest: /var/log/kibana.log

创建日志文件

touch /var/log/kibana.log
chown kibana.kibana /var/log/kibana.log

启动服务

systemctl start kibana

3.汉化

Github: https://github.com/anbai-inc/Kibana_Hanization/

#该方法适用于6.6 以前 ,6.6之后已提供官方汉化
wget https://codeload.github.com/anbai-inc/Kibana_Hanization/zip/master.zip
unzip master.zip
cd  Kibana_Hanization-master/old
python main.py /usr/share/kibana/

systemctl restart kibana

4.使用

访问:

http://IP:5601/

官方文档: https://www.elastic.co/guide/cn/kibana/current/index.html

五、Filebeat

轻量级日志采集工具

Filebeat可以直接将采集的日志数据传输给ES集群, 也可以给logstash(5044端口接收)。

更多Beat: https://www.elastic.co/cn/downloads/beats

1.安装

下载: https://www.elastic.co/cn/downloads/beats/filebeat

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.4.2-x86_64.rpm
rpm -ivh filebeat-7.4.2-x86_64.rpm

2.配置

vim /etc/filebeat/filebeat.yml

- type: log
   #开启
   enabled: true
   #收集的日志路径
   paths:
     - /var/log/*.log
     - /usr/local/nginx/logs/access.log
#Kibana 服务器
setup.kibana:
 host: "IP:5601"
#Logstach Master服务器 (二选一)
output.logstash:
   hosts: ["10.1.1.81:5044"]
#ES服务器(二选一)
output.elasticsearch:
   hosts: ["10.1.1.82:9200"]

3.启动服务

systemctl start filebeat

4. Filebeat + Logstach

input {
    beats {
        port => 5044
    }
}
output {
    elasticsearch {
        hosts => ["ESIP:9200"]
        index => "filebeat-%{+YYYY.MM.dd}"
    }
}

开启

#启动前先kill掉之前进程
/usr/share/logstash/bin/logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/test.conf &

其他

更多请参考:

https://blog.csdn.net/laoyang360/article/details/79293493

Last modification:January 23rd, 2020 at 11:03 pm