老男孩教育专注IT教育10余年,只培养IT技术精英

全国免费咨询电话(渠道合作):400-609-2893

分布式日志系统收集平台ELK+EFK,从部署到实战(上)!

老男孩IT教育

技术博客

2023年7月20日 17:21

ELK是一组开源软件的简称,其包括ElasticSearch(数据库)、Logstash(收集数据)和 Kibana(展示、过滤、出图)。ELK最近几年发展迅速,已经成为目前最流行的集中式日志解决方案。

  ELK是一组开源软件的简称,其包括ElasticSearch(数据库)、Logstash(收集数据)和 Kibana(展示、过滤、出图)。ELK最近几年发展迅速,已经成为目前最流行的集中式日志解决方案。

  而EFK可以替代ELK来使用,logstash跑在jvm上,资源消耗比较大,filebeat更轻量,占用资源更少。

  其包括ElasticSearch(数据库)、Filebeat(收集数据性能好)、Logstash(收集数据)、Kibana(展示、过滤、出图)、Kafka(缓存消息队列)。

  ElasticStack部分

  ElasticStack用于存放ElasticStack数据,可以单独实现搜索功能。

  极速部署指南:

  jdk环境(oracle jdk rpm)(7.0之后已经内置);

  es软件包(elasticsearch-7.9.3-x86_64.rpm);

安装es 
rpm -ivh elasticsearch-7.9.3-x86_64.rpm
warning: elasticsearch-7.9.3-x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY
Preparing...                          ################################# [100%]
Creating elasticsearch group... OK
Creating elasticsearch user... OK
Updating / installing...
   1:elasticsearch-0:7.9.3-1          ################################# [100%]
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
 sudo systemctl daemon-reload
 sudo systemctl enable elasticsearch.service
### You can start elasticsearch service by executing
 sudo systemctl start elasticsearch.service
Created elasticsearch keystore in /etc/elasticsearch/elasticsearch.keystore

systemctl daemon-reload
systemctl enable elasticsearch.service
systemctl start elasticsearch.service

  对于Elasticsearch7.0之后的版本不需要再独立的安装JDK了,软件包里已经自带了最新的JDK,所以直接启动即可。

10.0.0.90 es01.oldboylinux.cn
10.0.0.91 es02.oldboylinux.cn
10.0.0.92 es03.oldboylinux.cn
10.0.0.93 kafka.oldboylinux.cn

  测试访问

[root@oldboy-elastic-stack-es01 ~]# curl 127.0.0.1:9200
{
  "name" : "oldboy-elastic-stack-es01",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "_zvKGMEkQX-e8eR_Qohi6w",
  "version" : {
    "number" : "7.9.3",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "c4138e51121ef06a6404866cddc601906fe5c868",
    "build_date" : "2020-10-16T10:36:16.141335Z",
    "build_snapshot" : false,
    "lucene_version" : "8.6.2",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

  目录结构

  配置文件

  elasticsearch.yml

node.name: es01.oldboylinux.cn              #节点名称
path.data: /var/lib/elasticsearch                      #数据目录
path.logs: /var/log/elasticsearch                      #日志目录
bootstrap.memory_lock: true                        #锁定内存,防止别人占用属于es的内存。
network.host: 10.0.0.90,127.0.0.1                      #监听地址,本地网卡ip
http.port: 9200                  #es端口(api接口端口)
discovery.seed_hosts: ["10.0.0.90"]                      #发现节点,这里可以使用域名
cluster.initial_master_nodes: ["10.0.0.90"]              #集群初始化节点,这里可以使用域名

  补充["ip1或域名","ip2"]可以写为-"ip1或域名"-"ip2"

cp /etc/elasticsearch/elasticsearch.yml{,.bak}
cat >/etc/elasticsearch/elasticsearch.yml<<EOF
node.name: es01.oldboylinux.cn    
path.data: /var/lib/elasticsearch      
path.logs: /var/log/elasticsearch      
bootstrap.memory_lock: true        
network.host: 10.0.0.90,127.0.0.1      
http.port: 9200        
discovery.seed_hosts: ["10.0.0.90"]      
cluster.initial_master_nodes: ["10.0.0.90"] 
EOF
备份

  重启故障:提示内存锁定失败

  重启后查看日志发现提示内存锁定失败

[2021-08-10T12:22:58,184][ERROR][o.e.b.Bootstrap          ] [es01.oldboylinux.com] node validation exception
[1] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked

  官网解决方案:

https://www.elastic.co/guide/en/elasticsearch/reference/current/setting-system-settings.html#systemd

  解决命令:

systemctl edit elasticsearch
[Service]
LimitMEMLOCK=infinity

systemctl daemon-reload
systemctl restart elasticsearch.service

  检查结果

[root@oldboy-elastic-stack-es01 ~]# ss -lntup |grep java
tcp    LISTEN     0      128      [::ffff:10.0.0.90]:9200               [::]:*                   users:(("java",pid=43888,fd=261))
tcp    LISTEN     0      128      [::ffff:127.0.0.1]:9200               [::]:*                   users:(("java",pid=43888,fd=260))
tcp    LISTEN     0      128      [::ffff:10.0.0.90]:9300               [::]:*                   users:(("java",pid=43888,fd=258))
tcp    LISTEN     0      128      [::ffff:127.0.0.1]:9300               [::]:*                   users:(("java",pid=43888,fd=257))
[root@oldboy-elastic-stack-es01 ~]# curl es01.oldboylinux.cn:9200
{
  "name" : "es01.oldboylinux.cn",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "zcU_mdHVSYaGzpBC1Q2T8w",
  "version" : {
    "number" : "7.9.3",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "c4138e51121ef06a6404866cddc601906fe5c868",
    "build_date" : "2020-10-16T10:36:16.141335Z",
    "build_snapshot" : false,
    "lucene_version" : "8.6.2",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

  部署es-head插件

  es通过程序代码调用es 各种api接口,es-head查看与显示es状态信息,数据量,具体数据

  elasticsearch-head介绍

官方地址:
https://github.com/mobz/elasticsearch-head

elasticsearch-head是一款用来管理Elasticsearch集群的第三方插件工具。
elasticsearch-Head插件在5.0版本之前可以直接以插件的形式直接安装,但是5.0以后安装方式发生了改变,需要nodejs环境支持,或者直接使用别人封装好的docker镜像,更推荐的是谷歌浏览器的插件。

  elasticsearch-head的三种安装方式

1.npm安装方式             #下载源码,编译,nodejs运行 部分公司使用 
2.docker安装              #方便 根据已经制作好的es-head插件的容器,下载,运行
3.google浏览器插件(推荐)  #安装谷歌浏览器插件,直接访问es

  docker安装elasticsearch-head

docker run -p 9100:9100 mobz/elasticsearch-head:7

  npm安装elasticsearch-head

yum/apt

pip install  #python软件包
npm install  #nodejs 软件包 

cd /opt/
wget https://nodejs.org/dist/v12.13.0/node-v12.13.0-linux-x64.tar.xz
tar xf node-v12.13.0-linux-x64.tar.xz
mv node-v12.13.0-linux-x64 node
echo 'export PATH=$PATH:/opt/node/bin' >> /etc/profile
source /etc/profile 
npm -v
node -v 

git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head

npm install -g cnpm --registry=https://registry.npm.taobao.org

cnpm install
cnpm run start

  修改Elasticsearch配置文件,添加如下参数并重启:

#准许es 被跨域访问
http.cors.enabled: true 
http.cors.allow-origin: "*"

  es-head谷歌浏览器插件安装

  谷歌浏览器:更多工具-->拓展程序-->开发者模式-->选择解压缩后的插件目录

  edge浏览器:扩展--->管理扩展-->开发者模式-->选择解压缩后的插件目录

  ES数据类型

MySQL术语         Elasticsearch术语
库        索引  index
表                类型  _doc
字段(列)           json数据的key
值                json数据的value
记录(行)           文档  doc

  eg数据库中存放

  es存放(json格式数据)

{ 
    "project": "基本信息",
    "name": "公网ip",
    "finish": true,
    "detail": "",
    "pub": true,
    "cmd":"curl ifconfig.io"
}

  使用ES

  访问ES方式:

  通过代码访问;

  通过api调试工具访问;

  通过kibana访问es;

  GET请求

/_cat #显示所有接口

 

/_cat/health  集群健康状态

  POST/PUT请求

  指定id方法PUT

curl -XPUT 'http://es01.oldboylinux.cn:9200/linux/_doc/1' -H 'Content-Type: application/json' -d '
{
  "name": "lidao996",
  "age": "18"
}'

  查看数据

  查询

指定id方法POST 随机id
POST /linux/_doc/
{

  "name": "li",
  "age": "18"
}

#term查询 一般根据 数据文档中 某一个键值的内容进行查询  
GET linux/_search
{
  "query": {
    "term": {
      "name": {
        "value": "li"
      }
    }
  }
}

  推荐阅读:分布式日志系统收集平台ELK+EFK,从部署到实战(下)!

本文经授权发布,不代表老男孩教育立场。如若转载请联系原作者。