安装ES

ELK是有Elastic公司的三个组件配合进行日志收集,分别是:

  • ElasticSearch:用于存储日志信息。
  • Logstash:用于收集、处理和转发日志信息。
  • Kibana:提供可搜索的Web可视化界面。

当然,现在很多都配合着Beats进行使用,这里不做过多描述,感兴趣的可以查看官网,https://www.elastic.co/cn/products/beats,这里有很多对Beats的描述。

安装ES

  1. 从官网下载elasticsearch

  2. 将压缩包解压到适当位置

  3. 通过终端进入到文件夹内

  4. 修改elasticsearch的配置文件,文件路径在elasticsearch-6.7.1/config/elasticsearch.yml,在文件末端追加:

    # 去掉指定的ip地址
    network.host: 0.0.0.0
    
  5. 启动ES:命令行输入命令如下:

    1. cd bin/
    2. ./elasticsearch //前台运行 或者 nohub ./elasticsearch & //后台运行
    
  6. 验证是否安装成功:

浏览器输入:http://localhost:9200/

安装Head

  1. 安装 nodejs

  2. 安装grunt

    1. npm install -g grunt-cli
    2. 安装完成后执行: grunt -version
    1. 配置运行

      1. 进入Elasticsearch安装目录下的config目录,修改elasticsearch.yml文件.在文件的末尾加入以下代码

        # 配置head
        http.cors.enabled: true 
        http.cors.allow-origin: "*"
        node.master: true
        node.data: true
        
      2. 重启ES

      3. 在https://github.com/mobz/elasticsearch-head中下载head插件,选择下载zip

      4. 解压到指定文件夹下,进入该文件夹,修改Gruntfile.js 在对应的位置加上hostname:'*'

      5. 执行npm install 安装
        ,完成后执行grunt server 或者npm run start运行head插件,如果运行不成功建议重新安装grunt。成功如下

        登录地址:http://127.0.0.1:9100

安装Kibana

  1. 安装JDK8以上版本。

  2. 下载kibana,注意版本一定要与ES一致。

  3. 解压kibana到指定文件夹

  4. 修改config/kibana.yml配置文件

    # 允许远程访问
    server.host: "0.0.0.0"
    # es主机地址
    elasticsearch.hosts: ["http://ip:9200"]
    
    

    kibana常见配置项:

    # pingElasticsearch超时时间
    elasticsearch.pingTimeout
    # 读取Elasticsearch数据超时时间
    elasticsearch.requestTimeout  
    #Elasticsearch主机地址
    elasticsearch.url: "http://ip:9200" 
    # 允许远程访问
    server.host: "0.0.0.0" 
    # Elasticsearch用户名 这里其实就是我在服务器启动Elasticsearch的用户名
    elasticsearch.username: "es"  
    # Elasticsearch鉴权密码 这里其实就是我在服务器启动Elasticsearch的密码
    elasticsearch.password: "es"  
    
  5. 直接启动,进入bin目录

    ./kibana
    

    后台启动,进入bin目录

    nohup ./kibana &
    
  6. 访问http://ip:5601

汉化kibana

  1. 下载汉化文件:https://github.com/anbai-inc/Kibana_Hanization/
  2. 参考github中的项目介绍进行汉化。

安装logstash

  1. 下载logstash,注意版本要与es一致

  2. 解压文件到指定位置

  3. 测试logstash

    1. 进入logstash目录

    2. 简单输出到控制台

      bin/logstash -e 'input { stdin { } } output { stdout {} }'
      
    1. 日志文件输出到ES中

    2. 在logstash文件夹中创建文件,logstash.conf

    3. 在logstash.conf中输入es的相关信息:

    ```yml
    input {
      tcp {
        mode => "server"
        host => "0.0.0.0"
        port => 4560
        codec => json_lines
      }
    }
    output {
      elasticsearch {
        hosts => "localhost:9200"
        index => "springboot-logstash-%{+YYYY.MM.dd}"
      }
    }
    ```
    
    1. 启动logstash

      bin/logstash -f logstash.conf
      

springboot集成logstash

  1. 在项目中添加logstash-logback-encoder依赖

    		<dependency>
    			<groupId>net.logstash.logback</groupId>
    			<artifactId>logstash-logback-encoder</artifactId>
    			<version>5.3</version>
    		</dependency>
    
  2. 配置logback日志

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <include resource="org/springframework/boot/logging/logback/base.xml" />
    
        <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
            <destination>127.0.0.1:4560</destination>
            <!-- 日志输出编码 -->
            <encoder charset="UTF-8"
                     class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
                <providers>
                    <timestamp>
                        <timeZone>UTC</timeZone>
                    </timestamp>
                    <pattern>
                        <pattern>
                            {
                            "logLevel": "%level",
                            "serviceName": "${springAppName:-}",
                            "pid": "${PID:-}",
                            "thread": "%thread",
                            "class": "%logger{40}",
                            "rest": "%message"
                            }
                        </pattern>
                    </pattern>
                </providers>
            </encoder>
        </appender>
    
        <root level="INFO">
            <appender-ref ref="LOGSTASH" />
            <appender-ref ref="CONSOLE" />
        </root>
    
    
    </configuration>
    
  3. 启动springboot项目

  4. 打开kibana管理页面,添加刚刚创建的索引

定时删除过期的日志

#/bin/bash
#es-index-clear
#只保留15天内的日志索引
LAST_DATA=`date -d "-15 days" "+%Y.%m.%d"`
#删除上个月份所有的索引
curl -XDELETE 'http://ip:port/*-'${LAST_DATA}'*'

crontab -e添加定时任务:

0 1 * * * /search/odin/elasticsearch/scripts/es-index-clear.sh

问题

ERROR: Cluster name [elasticsearch_nathan] subdirectory exists in data paths]

解决办法:删除路径中提到的路径:例如:删除/usr/local/var/lib/elasticsearch