• 01


    ELKstack简介
    什么是ELK?
    通俗来讲,ELK是由Elasticsearch、Logstash、Kibana 三个开源软件的组成的一个组合体,这三个软件当中,每个软件用于完成不同的功能,ELK 又称为ELK stack,官方域名为elastic.co,ELK stack的主要优点有如下几个:

    1.处理方式灵活: elasticsearch是实时全文索引,具有强大的搜索功能
    2.配置相对简单:elasticsearch全部使用JSON 接口,logstash使用模块配置,kibana的配置文件部分更简单。
    3.检索性能高效:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百亿级数据的查询秒级响应。
    4.集群线性扩展:elasticsearch和logstash都可以灵活线性扩展
    5.前端操作绚丽:kibana的前端设计比较绚丽,而且操作简单

    ---------------------------- -----------------------------------------------------------------------------------------------------
    这三个服务分别有什么功能:
    1:Elasticsearch
    是一个高度可扩展的开源全文搜索和分析引擎,它可实现数据的实时全文搜索搜索、支持分布式可实现高可用、提供API接口,可以处理大规模日志数据,比如Nginx、Tomcat、系统日志等功能。
    2:logstash
    可以通过插件实现日志收集和转发,支持日志过滤,支持普通log、自定义json格式的日志解析。
    3:Kibana
    主要是通过接口调用elasticsearch的数据,并进行前端数据可视化的展现。

    --------------------------------------------------------------------------------------------------------------------------------
    常见架构图:

    根据架构我们需要准备如下机器,部署一下elk:

    环境准备

    公网IP

    内网IP

    主机名

    部署服务

    用途

    192.168.6.124

    172.16.1.124

    elkstack01

    elasticsearch、JDK

    存储日志的数据库

    192.168.6.125

    172.16.1.125

    elkstack02

    elasticsearch、JDK

    存储日志的数据库

    192.168.6.126

    172.16.1.126

    elkstack03

    Logstash、JDK

    收集日志、过滤日志

    192.168.6.127

    172.16.1.127

    elkstack04

    Redis、Kibana

    消息队列、日志展示

    192.168.6.128

    172.16.1.128

    nginx01

    nginx、filebeat

    修改nginx日志格式为json收集

    192.168.6.129

    172.16.1.129

    tomcat01

    tomcat、JDK、filebeat

    修改tomcat日志格式为json收集

    设置时间同步:
    注意:elk(切记保证集群之间时间一致非常重要)
    echo '*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com &>/dev/null'   >> /var/spool/cron/root

    ------------------------------------------------------------------------------------------------------------------------------------

    部署elasticsearch

    在elkstack01 和 elkstack02两台机器分别安装elasticsearch,因为elasticsearch服务运行需要JAVA环境,所以两台服务器都需要安装JAVA环境。

    注意:
    如果你只是在虚拟机安装测试,内存至少要大于2G,否则可能会导致elasticsearch 起不来。并且服务启动会很慢,需要耐心等待一分钟左右。

    安装JDK环境
    下载地址: http://www.oracle.com/technetwork/java/javase/downloads/
    建议下载rpm包安装,如果下载tar包,需要在/etc/profile 里面配置环境变量。

    1:安装jdk
    [root@elkstack01 tools]# rpm -ivh jdk-8u221-linux-x64.rpm

    2: 检查jdk是否安装成功
    [root@elkstack01 tools]# java -version
    java version "1.8.0_221"
    Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
    Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)

    2019-9-6 追加:

    <官网说elasticsearch7.x内置了jdk ,经过后来测试,发现的确是内置jdk了。因此没必要安装jdk,当然安装也不影响>

    -------------------------------------------------------------------------------------------------------------

    3:安装elasticsearch - 使用yum localinstall 自动安装依赖包
    下载地址:https://mirrors.tuna.tsinghua.edu.cn/elasticstack/7.x/yum/
    [root@elkstack01 tools]# yum localinstall -y elasticsearch-7.1.1-x86_64.rpm

    4:修改elasticsearch.yml配置文件 - (CentOS7中配置)
    [root@elkstack01 ~]# grep -v “#” /etc/elasticsearch/elasticsearch.yml
    #设置集群名称(想要其他节点加入同一个集群必须集群名称相同)
    cluster.name: elk-cluster
    #节点名称(通过此配置项来区分集群中的所有节点)
    node.name: elk01
    #elasticsearch数据存放目录
    path.data: /data/elk/data
    #elasticsearch日志存放目录
    path.logs: /data/elk/logs
    #内存锁设置(在CentOS7中支持内存锁并且要修改启动脚本)
    bootstrap.memory_lock: true
    #elasticsearch监听地址
    network.host: 0.0.0.0
    #elasticsearch服务端口
    http.port: 9200

    #####################################################
    #配置所有集群节点IP
    discovery.seed_hosts: ["192.168.6.124",  "192.168.6.125"]

    #配置master 主节点竞选
    cluster.initial_master_nodes: ["elk01", "elk02"]

    2019-9-6 追加:

    注意中括号内的,号 后面一定要有空格,否则会导致集群发现不了。很多人粗心会忘记这个空格,导致查不出来错误。

    ######################################################

    6:修改启动脚本 ,在server标签下面增加一句
    [root@elkstack01 ~]# vim /usr/lib/systemd/system/elasticsearch.service
    #修改内存限制
    LimitMEMLOCK=infinity
    重新加载启动脚本
    [root@elkstack01 ~]# systemctl reload-daemon

    7:创建目录并授权
    创建数据目录
    [root@elkstack01 ~]# mkdir -p /data/elk/data
    创建日志目录
    [root@elkstack01 ~]# mkdir -p /data/elk/logs
    授权
    [root@elkstack01 ~]# chown -R elasticsearch.elasticsearch /data/elk/

    8:优化文件描述符
    编辑limit文件:
    [root@elkstack01 ~]# vim /etc/security/limits.conf
    * soft memlock unlimited
    * hard memlock unlimited
    * soft nofile 131072
    * hard nofile 131072

    9: 编辑子配置文件(CentOS6 - 是 90-nproc.conf)
    * soft nproc 2048
    root soft nproc unlimited

    10: 设置JVM最大最小内存限制
    编辑配置文件
    [root@elkstack01 ~]# vim /etc/elasticsearch/jvm.options
    -Xms1g
    -Xmx1g

    11: 启停elasticsearch (centos6 /etc/init.d/启动)
    [root@elkstack01 ~]# systemctl start elasticsearch
    [root@elkstack01 ~]# systemctl stop elasticsearch
    查看启动进程
    [root@elkstack01 ~]# netstat -lntup
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
    tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6185/sshd
    tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 6397/master
    tcp6 0 0 :::9200 :::* LISTEN 6793/java
    tcp6 0 0 :::9300 :::* LISTEN 6793/java
    tcp6 0 0 :::22 :::* LISTEN 6185/sshd
    tcp6 0 0 ::1:25 :::* LISTEN 6397/master

    打开浏览器访问地址:http://192.168.6.124:9200/

    {
    "name" : "elk02",  - #此节点名称
    "cluster_name" : "elk-cluster",  #此集群名称
    "cluster_uuid" : "_na_", #此集群uuid
    "version" : {
    "number" : "7.0.0", #版本号
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "b7e28a7",
    "build_date" : "2019-04-05T22:55:32.697037Z",
    "build_snapshot" : false, #创建快照
    "lucene_version" : "8.0.0",
    "minimum_wire_compatibility_version" : "6.7.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
    },
    "tagline" : "You Know, for Search" #注释 口号
    }

    ---------------------------------------------------------------------------------------------------------------------------------
    在elkstack02 上面也按照如上步骤,安装。

    [root@elkstack01 ~]# scp /etc/elasticsearch/elasticsearch.yml 192.168.6.125:/etc/elasticsearch/

    [root@elkstack02 ~]# vim /etc/elasticsearch/elasticsearch.yml
    #此行节点名称唯一即可
    node.name: elk02
    操作完成后,同样启动elasticsearch并且访问9200端口,检查是否安装成功。

    访问地址:http://192.68.6.125:9200/

     

    2019-9-6 追加:  

    使用curl方式,查看集群状态,下面会介绍使用插件看集群状态。

    [root@elk124 ~]# curl -X GET "192.168.6.124:9200/_cat/nodes"
    192.168.6.124 9 96 1 0.00 0.29 0.45 mdi - node-2
    192.168.6.126 7 95 1 0.01 0.16 0.22 mdi * node-3
    172.16.1.125 7 95 1 0.01 0.14 0.20 mdi - node-1

    [root@elk124 ~]# curl -X GET "192.168.6.124:9200/_cat/health?pretty"

    1567778441 14:00:41 my-application green 3 3 0 0 0 0 0 0 - 100.0%
     

    -----------------------------------------------------------------------------------------------------------------------------------
    安装elasticsearch插件

    插件是为了完成不同的功能,官方提供了一些插件但大部分是收费的,另外也有一些开发爱好者提供的插件,可以实现对elasticsearch集群的状态监控与管理配置等功能,我们现在要安装的是Elasticsearch的head插件,此插件提供elasticsearch的web界面功能。

    安装Elasticsearch的head插件时,要安装npm,npm的全称是Node Package Manager,是随同NodeJS一起安装的包管理和分发工具,它很方便让JavaScript开发者下载、安装、上传以及管理已经安装的包。

    在Elasticsearch 5.x版本以后不再支持直接安装head插件,而是需要通过启动一个服务方式。
    Github地址:https://github.com/mobz/elasticsearch-head

    安装npm(只需要在一个节点安装即可,如果前端还有nginx做反向代理可以每个节点都装)
    [root@elkstack01 ~]# yum install -y npm
    进入下载head插件代码目录
    [root@elkstack01 src]# cd /usr/local/
    从GitHub上克隆代码到本地
    [root@elkstack01 local]# git clone git://github.com/mobz/elasticsearch-head.git
    克隆完成后,进入elasticsearch插件目录
    [root@elkstack01 local]# cd elasticsearch-head/
    #清除缓存,会有警告信息,忽略。
    [root@elkstack01 elasticsearch-head]# npm cache clean -f
    使用npm安装n模块(不同的项目js脚本所需的node版本可能不同,所以就需要node版本管理工具)
    [root@elkstack01 elasticsearch-head]# npm install -g n
    安装最新版本n模块
    [root@elkstack01 elasticsearch-head]# n stable
    生成grunt
    [root@elkstack01 elasticsearch-head]# npm install grunt -save
    确认生成grunt文件
    [root@elkstack01 elasticsearch-head]# ll node_modules/grunt
    执行安装grunt
    [root@elkstack01 elasticsearch-head]# npm install
    后台启动head插件(切记,必须在插件目录下执行启动命令)
    [root@elkstack01 elasticsearch-head]# npm run start &
    验证端口是否启动成功
    [root@elkstack01 elasticsearch-head]# netstat -lntup
    tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 11293/grunt
    启动成功后,修改elasticsearch配置文件
    [root@elkstack01 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml
    #添加如下两行,开启跨域访问支持(添加在配置文件最后即可)
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    重启elasticsearch
    [root@elkstack01 elasticsearch-head]# systemctl restart elasticsearch.service

    如果启动成功了,则打开浏览器,访问:http://192.168.6.124:9100/

    备注:
    如果安装n模块遇到报错SSL认证问题,解决方案如下。
    #取消npm的ssl验证
    [root@elkstack01 elasticsearch-head]# npm config set strict-ssl false

    到此 elasticsearch 就安装成功了。

    运维
  • 相关阅读:
    Educational Codeforces Round 13
    Educational Codeforces Round 12
    vscode 修改标签栏样式为换行全部展示
    webpack uglifyjs 报错 Unexpected token name
    tsconfig.js 使用 paths 设置alias无效问题
    Webpack 报错 filename.indexOf is not a function 的问题
    'GL_EXT_shader_framebuffer_fetch' : extension is not supported
    Flutter命令突然无响应、vscode突然无法连接到IOS模拟器
    解决node fs.writeFile 生成csv 文件乱码问题
    数组map方法与如何使用ES5实现
  • 原文地址:https://www.cnblogs.com/jim-xu/p/11409408.html
Copyright © 2020-2023  润新知