什么是 ELK (Elastic SYACK)?

  • elk 是三个开源软件组成的一个组合体,是elastic公司研发的一套完成的日志收集分析和展示的企业级解决方案。每个软件用于完成不同的功能。它具有很强的数据搜索功能,每次查询都是实时查询,当然elasticsearch也是最占用服务器资源的搜索引擎,所以生产环境服务器配置要好些
    ELK 又称为 ELK stack,官方域名为 elastic.co

    E代表 elasticsearch ,L 代表(logstash),K 代表(kibana),用户开始用于日志搜索,并且希望可以对日志进行可视化。所以引用了强大的采集管道(Logstash)和灵活的可视化工具Kibana”下面会讲解三个组件的关系

elasticsearch简介

  1. 支持全文搜索、当日志收集到es之后就可以按照业务名称去创建index(索引),然后我们就可以进行全文搜索,而且速度很快,会直接返回结果
  2. 拥有强大的API功能支持json数据,可以大规模收集日志数据,比如Nginx,Tomcat等等。而且还会把搜索名称进行拆分 - 如淘宝搜索一件商品只需要搜索关键字就可以弹出
  3. 另外Elasticsearch和Logstsh还支持灵活扩展,扩容很快,我们只需要重启一下服务的进程就可以添加至集群

Logstash简介

  1. logstash 用来接收web服务的数据,他是依赖于java的,所以服务器性能要求较高。当然后期还加入了Beats等等轻量级工具,是GO写的是一个轻量级的收集日志工具,可以代替Logstash
  2. logstash具有实时收集日志和传输数据的能力。实现日志转发,日志过滤,支持普通日志或者自定义日志json日志的解析,最终发送给Elasticsearch

Kibana简介

  1. kibana为elastarch提供了可查看数据的web界面,通过elasticsearch的API的数据取查找,并在web界面展现。
  2. Kibana的前段操作也比较绚丽,支持绘图等功能, 而且操作也简单。
  3. 可以统一在一台机器上查看日志,可以快速的定位排错。

elasticsearch安装

  • 规划使用三台es来搭建集群,以保障我们服务的可用性
    官网,有自带的jdk环境安装包 ,有些需要自己安装jdk
    https://artifacts.elastic.co/downloads/
    jdk建议安装11版本,具体查看官方文档,不同的es版本jdk要求不同
    https://www.elastic.co/cn/support/matrix#matrix_jvm

1 三台机器同时操作下载安装包,并创建挂载点挂载

root@es1:~# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.13.2-amd64.deb
root@es1:~# mkdir /data/esdata/ -p
- 为elastic search专门添加一块数据盘存储数据
root@es1:~#mkfs.ext4 /dev/sdb
root@es1:~#mount /dev/sdb /data/esdata
root@es1:~#echo "/data/sdb /data/esdata ext4 defaults 0 0" >>/etc/fstab
root@es1:mount -a

2 开始安装elasticsearch,版本是7.13.2,es会自动创建用户和组,所以启动一定要用es用户。es会选举出一个master作为管理者(进行分片管理)

root@es1:~# dpkg -i /usr/local/src/elasticsearch-7.13.2-amd64.deb
- 修改es配置文件,并且详细介绍
root@es1:~# vim /etc/elasticsearch/elasticsearch.yml
cluster.name: yhtzjy
// 集群名称  三台机器名称必须一样才可以组件集群
node.name: node1
// 在同一个集群内三个机器名字都必须不同
path.data: /data/esdata/elasticsearch
path.logs: /data/esdata/logs
//数据路径和日志路径,目录会自动创建
#bootstrap.memory_lock: true
//宿主机的情况下内存较大可以开启,还需要指定service文件
network.host: 10.0.0.81
//网络监听地址,本机IP就可以
http.port: 9200
//端口号
discovery.seed_hosts: ["10.0.0.81", "10.0.0.82", "10.0.0.83"]
// 集群列表,三台都写上,他们之间会像radis一样进行心跳检测
cluster.initial_master_nodes: ["10.0.0.81", "10.0.0.82", "10.0.0.83"]
// 如果master主机挂了那些主机可以选举为master
action.destructive_requires_name: true
// 当我们通过API删除数据的时候是否可以通过正则删除,默认是true不能使用正则。必须精确索引全称

3 启动elastic search,三台一样操作,启动成功之后web就可以访问9200端口,会显示我们的集群状态

root@es1:~# chown elasticsearch:elasticsearch /data/esdata/ -R
root@es1:~# systemctl restart elasticsearch.service
root@es1:~# curl http://10.0.0.81:9200/

修改es的内存限制

如果宿主机配置较高可以加大对es的内存限制,官方文档
https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html

root@es1:~# vim /etc/elasticsearch/jvm.options
-Xms2g
-Xms2g
//内存设置多大合适? 官方建议16G (建议物理内存的一半)
// 这个时候可能无法启动  ,是因为service文件需要指定参数,设置无限内存
root@es1:~# vim /usr/lib/systemd/system/elasticsearch.service
LimitMEMLOCK=infinity
root@es1:~# systemctl daemon-reload
root@es1:~# systemctl restart elasticsearch.service
//如果报错就看下日志
root@es1:~# tail -100 /var/log/syslog 'grep -i error

elasticsearch插件之Head

  • 在google的在线商店搜索elasticsearch就会出现Google网址,早期是容器跑的,或者需要在linux下载,现在安装比较方便,可以直接添加
  • 所有的插件主要功能就是管理我们es上面的index 下载地址
    https://chrome.google.com/webstore/search/elasticsearch
  • 点击heed插件,输入es的IP地址就可以查看

elasticsearch中Master和slave的区别

Master:统计node节点状态信息(是否存活)、索引的创建和删除、索引的分配管理、可以在head插件直接关闭node节点等等。
Slave:同步Master的数据,等待机会成为Master

elasticsearch插件之cerebro

  • cerebro的功能比head插件功能更为强大,但是安装稍麻烦些,他依赖于java环境

  • 主要功能是用于测试创建一个index是否正常等,偏向于管理(测试数据是否正常)
    安装:单独在找一台服务器安装,cerebro的端口号是9000

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    root@web1:~# apt-get update && apt install openjdk-11-jdk
    root@web1:~# wget https://github.com/lmenezes/cerebro/releases/download/v0.9.4/cerebro_0.9.4_all.deb
    root@web1:~# dpkg -i /usr/local/src/cerebro_0.9.4_all.deb
    //修改配置文件,最下面写其中一台elacticsearch地址
    root@web1:~# vim /etc/cerebro/application.conf
    host = "http://10.0.0.81:9200"
    name = "yhtzjy-m44-cluster"
    headers-whitelist = [ "x-proxy-user", "x-proxy-roles", "X-Forwarded-For" ]
    //其中 name指定elasticsearch的集群名称,这样每次cereborweb界面直接点击集群名称就可以进入管理界面
    root@web1:~# vim /lib/systemd/system/cerebro.service
    //用户修改成为root,然后注释下面四行才可以启动
    root@web1:~# systemctl restart cerebro.service && systemctl enable --now cerebro.service
    root@web1:~# ss -ntl 'grep 9000
    root@es3:~# curl http://10.0.0.84:9000/ &>/dev/null && echo $?
  • 启动成功之后web访问IP+9000端口就可以访问

cerebor的使用

  • More-cat apis
    //鼠标点击more,选择cat apis,在选择health(生命值),然后就可以看到们集群的状态(三种颜色代表集群的不同状态)