ELK(一)

今天给大家浅讲一下ELK,ELK 是由 Elasticsearch、Logstash、Kibana 三个开源软件的组成的 一个组合体,ELK 是 elastic 公司研发的一套完整的日志收集、分析和展示的企业 级解决方案,ELK stack 的主要优点有如下几个: 
         处理方式灵活: elasticsearch 是实时全文索引,具有强大的搜索功能
         配置相对简单:elasticsearch 的 API 全部使用 JSON 接口,logstash 使用模块配 置,kibana 的配置文件部分更简单。
         检索性能高效:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百 亿级数据的查询秒级响应。 
         集群线性扩展:elasticsearch 和 logstash 都可以灵活线性扩展 前端操作绚丽:kibana 的前端设计比较绚丽,而且操作简单

什么是elasticsearch?

   是一个高度可扩展的开源全文搜索和分析引擎,它可实现数据的实时全文搜索 搜索、支持分布式可实现高可用、提供 API 接口,可以处理大规模日志数据,比 如 Nginx、Tomcat、系统日志等功能。
    Elasticsearch 使用 Java 语言开发,是建立在全文搜索引擎 Apache Lucene 基础 之上的搜索引擎,https://lucene.apache.org/。
    Elasticsearch 的特点: 实时搜索、实时分析 分布式架构、实时文件存储 文档导向,所有对象都是文档 高可用,易扩展,支持集群,分片与复制

什么是logstash?

Logstash 是一个具有实时传输能力的数据收集引擎,其可以通过插件实现日志 收集和转发,支持日志过滤,支持普通 log、自定义 json 格式的日志解析,最终 把经过处理的日志发送给 elasticsearch。

什么是kibana?

Kibana 为 elasticsearch 提供一个查看数据的web界面,其主要是通过 elasticsearch 的 API 接口进行数据查找,并进行前端数据可视化的展现,另外还 可以针对特定格式的数据生成相应的表格、柱状图、饼图等。

下面我们开始按照下面图中架构来搭建ELK环境

环境架构

支持矩阵 | Elastic(在新窗口中打开)

本次elasticsearch使用三个节点版本号7.12.1 系统为Ubuntu 18.04
节点ip为:
 10.0.0.120 es1
 10.0.0.121 es2
 10.0.0.122 es3
一、首先elasticsearch需要java环境本次安装使用java-11.0.15 查看合适的JDK环境
#  apt install openjdk-11-jre
二、添加数据盘
mkdir /data/esdata -p   #创建数据存放位置
mkfs.ext4 /dev/sdb   #格式化磁盘
mount /dev/sdb /data/esdata  #挂载到数据存放位置
vim /etc/fstab   #加入开机启动挂载
/dev/sdb /data/esdata ext4 defaulst 0 0
mount -a   #重新加载fstab文件,是否正常挂载
三、安装elasticsearch (本次在清华源下载)
# wget https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/apt/pool/main/e/elasticsearch/elasticsearch-7.12.1-amd64.deb
# dpkg -i elasticsearch-7.12.1-amd64.deb
四、配置elasticsearch集群
# cat /etc/elasticsearch/elasticsearch.yml |grep -v ^#
cluster.name: lhl-es    #集群名称,集群名称必须统一
node.name: node1           #每个elasticsearch节点名称都不能唯一
path.data: /data/esdata/elasticsearch   #存储数据目录
path.logs: /data/esdata/logs            #存储日志目录
network.host: 10.0.0.120           #监听地址
http.port: 9200                    #监听端口
discovery.seed_hosts: ["10.0.0.120", "10.0.0.121", "10.0.0.122"]   #集群内所有节点的ip
cluster.initial_master_nodes: ["10.0.0.120", "10.0.0.121", "10.0.0.122"]   #可以选举为master节点的IP
action.destructive_requires_name: true          #调用API删除索引必须指定库名称,以防*删除所有库
http.cors.enabled: true #开启支持跨域访问 
http.cors.allow-origin: "*" #指定允许访问范围
五、给数据目录权限
# chown -R elasticsearch.elasticsearch /data/esdata
六、启动服务,查看监听端口:9200客户端 9300集群 
# systemctl start elasticsearch.service
# systemctl enable elasticsearch.service
七、解除elasticsearch内存使用限制,默认限制为4G,内存限制根据系统内存的总数的一般,最大不超过30G,如果主机内存为80G,建议新建一个elasticsearch节点。
vim /etc/elasticsearch/elasticsearch.yml
   bootstrap.memory_lock: true   #初始化内存的锁定,启动时直接占用限制的内存数量
vim /usr/lib/systemd/system/elasticsearch.service #修改内存限制
   LimitMEMLOCK=infinity   #无限制使用内存
vim /etc/elasticsearch/jvm.options  修改限制的内存大小
  22 -Xms2g 
  23 -Xmx2g 
然后在重启服务

es数据分片

ES 的每个分片(shard)都是lucene的一个index,而lucene的一个index只能存储20亿个文档,所以一个分片也只能最多存储20亿个文档。 另外,我们也建议一个分片的大小在10G-50G之间,太大的话查询时会比较慢,另外在做副本修复的时,耗时比较多;分片太小的话,会导致一个索引的分片数目很多,查询时带来的fanin-fanout 太大。


分片数量:elasticsearch 7版本是默认一主分片,一个副本 分片数量最好不超过node节点数量。

集群中如果有一个节点挂掉,副本转成主分片,在另外节点创建副本。

Master 的职责: 统计各 node 节点状态信息、集群状态信息统计、索引的创建和删除、索引分配 的管理、关闭 node 节点等 
Slave 的职责:从 master 同步数据、等待机会成为 Master

一个文件写入后会把数据拆分为配置分片的数量,同时写入,比如有三个分片,6G文件拆分为三分,每份2G写入不同的分片

es集群监控

curl -sXGET http://10.0.0.120:9200/_cluster/health?pretty=true
{
  "cluster_name" : "lhl-es",
  "status" : "yellow",    #yellow为副本分片丢失 red为主分片丢失 gree为运行正常
  "timed_out" : false,
  "number_of_nodes" : 2,
  "number_of_data_nodes" : 2,
  "active_primary_shards" : 2,
  "active_shards" : 2,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 2,
  "delayed_unassigned_shards" : 2,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 50.0
}
#获取到的是一个 json 格式的返回值,那就可以通过shell的if判断对其中的信息进行分 析,例如对 status 进行分析,如果等于 green(绿色)就是运行在正常,等于 yellow(黄 色)表示副本分片丢失,red(红色)表示主分片丢失