最近写了一个springcloud的开发脚手架,看日志即使用了链路追踪,在多个服务看日志文件还是有点繁琐,特别是上线了你要跟踪一个已执行的接口,即使上家公司就是这样过来的。虽然听过ELK的大名,但没从没搭建过,就来玩一玩。如果要解决日志查看分析及存储问题,可以去了解一下阿里云的日志服务,在电商公司的时候用过。

1.搭建elasticsearch

1.1 直接执行    
     rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
1.2  在/etc/yum.repos.d目录下添加文件 elasticsearch.repo,添加内容    
     [elasticsearch-6.x]
     name=Elasticsearch repository for 6.x packages
     baseurl=https://artifacts.elastic.co/packages/6.x/yum
     gpgcheck=1
     gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
     enabled=1
     autorefresh=1
     type=rpm-md
最新的是7.9,我选择6.x版本,因为我不喜欢吃螃蟹。
这步去下载elasticsearch安装包的时候会很卡,玩两把王者荣耀差不多。可以考虑直接使用.tar.gz安装包安装。
官网说的听清楚的。
1.3  开始安装 
     yum install elasticsearch
1.4  配置一下让外网访问,是否全开放还是指定ip看个人,配置文件在/etc/elasticsearch目录下。修改elasticsearch.yml文件
     network.host: 0.0.0.0 //全开放
     http.port: 9200 //暴露给外网http的端口, 9300端口是elasticsearch的TCP通讯接口。节点之间的调用。
至于数据保存位置和日志地址,我就默认的,反正能找到就行。
1.5  启动elasticsearch
     systemctl start elasticsearch.service  //关闭 systemctl stop elasticsearch.service
1.6  测试一下是否成功
     curl -X GET "localhost:9200/?pretty"
     输出类似则成功:
{
  "name" : "6Vd_-6O",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "9Wy_VA8-QqCm2ws4raGAkg",
  "version" : {
    "number" : "6.8.11",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "00bf386",
    "build_date" : "2020-07-09T19:08:08.940669Z",
    "build_snapshot" : false,
    "lucene_version" : "7.7.3",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}
1.7  安装elasticsearch可视化工具,elasticsearch-head。ElasticHD是个页面优美,功能强大的插件,一下标记
使用谷歌插件方式安装,得翻墙,地址:
https://chrome.google.com/webstore/detail/elasticsearch-head/ffmkiejjmecolpfloofpjologoblkegm/
至此。安装完成。

2. 搭建kibana

2.1  这里我使用的是.tar.gz的安装包方式安装,yum下载太慢了,两把王者荣耀下去还不够,不过这个也慢。 
      下载压缩包包,版本同es一样
      wget https://artifacts.elastic.co/downloads/kibana/kibana-6.8.11-linux-x86_64.tar.gz
 2.2  解压压缩包:
      tar -xzf kibana-6.8.11-linux-x86_64.tar.gz
 2.3  进入安装目录(压缩包的形式安装,配置都在这个目录下)
      cd kibana-6.8.11-linux-x86_64/   
 2.4  在启动之前我们先给它设置一下基本配置
       server.port: 9090 //程序启动端口
       server.host: "0.0.0.0" //暴露给全外网
       elasticsearch.hosts: ["http://localhost:9088"] //es的连接地址,多个在数组,隔开
       kibana.index: ".kibana"  //kibana使用es的索引
       logging.dest: /root/kibana-6.8.11-linux-x86_64/log/kibana.log  //设置kibana的输出日    
                    志,我没找到它默认的日志位置在哪
 2.5  启动kibana,bin目录下的kibana命令
       ./bin/kibana  //前台启动,ctrl+c就关闭了
       nohup ./bin/kibana & //后台启动
 2.6  至此,kibana启动成功, http://ip:port  就可以直接访问

kibana一启动es就关闭了?一个小插曲,也就浪费了我3个小时。ES装完请查看你的内存是否足够支持启动kibana。修改ES的启动内存,vim /etc/elasticsearch/jvm.yml 。哎,刚花费我1000多买的一台2核4G的阿里云服务器,还以为暴富了,还不够我研究两个东西。

3. 搭建logstash

3.1 使用.tar.gz安装包形式安装,因为文档中很多是用./bin/logstash方式来演示的
    wget https://artifacts.elastic.co/downloads/logstash/logstash-6.8.11.tar.gz
3.2  解压安装包
    tar -xvzf logstash-6.8.11.tar.gz  //全部解压到一个文件夹下好管理
3.3  设置启动大小,我的内存不够
    cd logstash-6.8.11
    vim config/jvm.options
3.4  启动logstash并且测试是否安装成功,具体可参考官网
  执行命令:  ./bin/logstash -e 'input { stdin { } } output { elasticsearch { hosts => ["127.0.0.1:9088"] } stdout { codec => rubydebug }}'
  查看是否成功,如果成功,直接输入 XXX ,默认它会存在一个logstash-*的索引下,可以去es查看。
3.5  至此,logstash安装成功。

   4.开始想办法把springboot日志传到logstash中,springboot 集成logstash。     

4.1 项目中加入依赖包
        <dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
            <version>5.3</version>
        </dependency>
4.2 logback-spring.xml日志文件中加入: 

<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
      <destination>127.0.0.1:9601</destination>  //这个地方的端口要和接下来的logstash配置一样
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
            <providers>                  //注意上面这个class类,开始我选择其他类,发现logstash
                <timestamp>                一直收不到日志信息,耗了我3个小时检查各种配置。
                    <timeZone>UTC</timeZone>
                </timestamp>
                <pattern>

                </pattern>
            </providers>
        </encoder>
    </appender>

    <Root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="LOGSTASH"/>  //放入上面的模块
    </Root>

springboot项目集成完毕。

5. 启动logstash来收集springboot日志

5.1 在config目录下新建一个 xxx.conf 文件
    vim xxx.conf
    输入以下内容:
     input {
         tcp {
	         port => 9601
	         codec => json
         }
    }
    output {
         elasticsearch {
              hosts => ["localhost:9088"] 
              index => "springboot-%{+YYYY.MM.dd}"  //创建索引,数据将存储在这个索引下
         }
         stdout { codec => rubydebug }  //这个主要在测试的时候可以方便看到输入数据是否是想要的
    }
  
5.2 启动logstash
  ./bin/logstash -f ./config/xxx.conf

6.  至此,整个流程已经打通了,springboot日志通过tcp发送到logstash,logstash又输出到ES,kibana又连接上了ES,所以整个流程已经通了。下面开始测试。

自己执行一个springboot的一个接口,让它输出日志,然后它会自动保存到ES下的springboot-当日日期索引下,这个索引可以在5.1步骤自行设定。查看ES是否保存成功了,保存成功那么我们就可以去kibana查看了。

进入kibana页面,然后进入左下角管理界面,再进入索引模式,然后创建索引模式,选择刚才的springboot-当日日期索引,可以写成springboot-*形式进行通配,这里其实就是把这个ES索引下的数据引入到kibana。

进入左上角Discover界面,选择刚刚创建的索引模式,然后就可以看到美妙的画面了。

怎么查看es日志 elastic查看日志_spring

怎么查看es日志 elastic查看日志_elasticsearch_02

怎么查看es日志 elastic查看日志_elasticsearch_03