yk 1 elk

1 elk简介

elk 简介

  • Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

  • Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。

  • Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

elk 下载安装

   下载地址:https://www.elastic.co/downloads

   建议在 linux上运行,elk在windows上支持得不好,另外需要jdk1.8 的支持,需要提前安装好jdk.

2 elk架构

Spring Cloud Sleuth与ELK整合时实际上只要与Logstash对接既可,所以我们要为Logstash准备好Json格式的日志信息。SpringBoot默认使用logback来记录日志,而Logstash自身也有对logback日志工具的支持工具,所以可以直接通过在logback配置中增加Logstash的Appender来非常方便的将日志转化为Json的格式存储和输出了。

Spring Cloud Sleuth与Logstash的直接集成有两种方式:

Logstash与微服务应用安装在一起,监听日志文件

Logstash独立部署,微服务节点通过网络向Logstash发送日志信息。

之所以上面用了直接这个词,因为还存在间接形式的变种,微服务将日志发送给Redis或者MQ,再由他们去对接Logstash。

3 elk 安装

3.1 es安装启动

1 解压

   tar -zxvf elasticsearch-6.3.2.tar.gz

2 修改配置文件

[root@study08 elasticsearch]# grep "^[a-z]" elasticsearch.yml 
cluster.name: coship-xdx-test      #集群名称,集群内所有节点配置一样
node.name: coship-node-1           #节点名称,唯一
path.data: /elastic/data                 #数据存储路径
path.logs: /elastic/log                   #日志存储路径
bootstrap.memory_lock: true        #内存锁住,不会触发交换,centos7配置
network.host: 0.0.0.0                   #监听地址
http.port: 9200                            #监听端口

 3 启动

  ./bin/elasticsearch

  版本查看:curl -XGET localhost:9200

  配置信息:network.host: 0.0.0.0  http.port: 8088

                 

   后台启动:./elasticsearch -d  

4  启动失败

4.1 内存不足

  修改jvm.properties文件

4.2 不能以root用户启动

    Caused by: java.lang.RuntimeException: can not run elasticsearch as root

    新的版本安全级别 提高了,不允许采用root启动,我们需要添加一个新的用户

4.3elasticsearch max virtual memory areas vm.max_map_count [65530] is too low

   切换到root用户修改配置sysctl.conf

   vi /etc/sysctl.conf

   vm.max_map_count=655360

   sysctl -p 

4.4 Error: Could not find or load main class org.elasticsearch.tools.JavaVersionChecker
Elasticsearch requires at least Java 8 but your Java version from /usr/local/share/applications/jdk1.8.0_181/bin/java does not meet this requirement

  openjdk version "1.8.0_181"

  原因:没有权限

  

  虽然此文件夹属于elasticsearch;但是此用户没有权限调用java  没有办法打开java的位置!

3. 2 head插件安装 

 参考:https://www.jianshu.com/p/8091adadfc1b

            https://blog.csdn.net/u012637358/article/details/80780601

安装包准备elasticsearch-head-master.zip

       1 解压

        uzip elasticsearch-head-master

        cd elasticsearch-head-master

        2 辅助:node.js环境        

            elasticsearch-head插件需要nodejs的支持!

            node-v8.11.3-linux-x64.tar.xz

    

             解压   配置环境变量   

            #set node environment
            export NODE_HOME=/usr/local/node-v8.11.3-linux-x64
            export PATH=$NODE_HOME/bin:$PATH

             验证版本:node -v
             新版的NodeJS已经集成了npm,所以npm也一并安装好了!

             验证版本:npm -v

            常规NodeJS的搭建到现在为止已经完成了    

          3 正式安装

                    cd elasticsearch-head-master

                    npm install

                    ----ERR! [email protected] install: `node install.js

                   解决方案:npm -g install [email protected] --ignore-script

                                     或者通过cnm安装 cnpm install

              

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

                   [root@node1 ~]#  npm install -g grunt

                   root@node1 ~]#  npm install -g grunt-cli --registry=https://registry.npm.taobao.org --no-proxy

          4 修改ip 端口号 启动

                 vi Gruntfile.js:  hostname: '0.0.0.0',

                启动:[root@node1 elasticsearch-head-master]$ grunt server

                === npm run start

                后台启动:nohup grunt server & exit

          5、为es设置跨域访问(必须授权 才能添加集群连接信息)
               vi config/elasticsearch.yml         
              #新增两行
             http.cors.enabled: true
             http.cors.allow-origin: "*"
          6、启动es,启动head插件

3.3 安装sql插件

           参考:https://blog.csdn.net/upshi/article/details/79799508#2%E5%AE%89%E8%A3%85head%E6%8F%92%E4%BB%B6
 

3.4 es运维

     常见:1 分为unassinged  

                解决方法:重新分配分片 
                

 
  1. #!/bin/sh

  2. NODE="node-1"

  3. IFS=$'\n'

  4. for line in $(curl -s 'localhost:8088/_cat/shards' | fgrep UNASSIGNED); do

  5. INDEX=$(echo $line | (awk '{print $1}'))

  6. SHARD=$(echo $line | (awk '{print $2}'))

  7. echo "$INDEX"

  8. echo "$SHARD"

  9. echo "$NODE"

  10.  
  11. curl -XPOST 'localhost:8088/_cluster/reroute?pretty' -H 'Content-Type: application/json' -d'

  12. {

  13. "commands": [

  14. {

  15. "allocate_stale_primary": {

  16. "index": "'$INDEX'",

  17. "shard": '$SHARD',

  18. "node": "'$NODE'",

  19. "accept_data_loss": true

  20. }

  21. }

  22. ]

  23. }'

  24. done

                 解决方法:删除分片

                 curl -XDELETE http://127.0.0.1:9200/logstash-2015.06.0*

                 查询为分片的数据:

                 curl -s 'localhost:8088/_cat/shars 'localhost:8088/_cat/shards' | fgrep UNASSIGNED

 参考链接:

https://blog.csdn.net/zxf_668899/article/details/53945145

https://blog.csdn.net/laoyang360/article/details/78443006

https://discuss.elastic.co/t/how-to-resolve-the-unassigned-shards/87635/2

4 elk logstash 安装

4.1 简介

          Logstash是一个开源的、接受来自多种数据源(input)、过滤你想要的数据(filter)、存储到其他设备的日志管理程序。                      Logstash包含三个基本插件input\filter\output!

          一个基本的logstash服务必须包含input和output!

4.2 架构原理

Logstash数据处理有三个阶段,input–>filter–>output.input生产数据,filter根据定义的规则修改数据,output将数据输出到你定义的存储位置。

Inputs:

    数据生产商,包含以下几个常用输出:

  • file: 从文件系统中读取文件,类似使用tail -0F

  • syslog: syslog服务,监听在514端口使用RFC3164格式

  • redis:  从redis服务读取,使用redis管道和列表。

  • beats: 一种代理,自己负责收集好数据然后转发给Logstash,常用的如filebeat.

Filters:

    filters相当一个加工管道,它会一条一条过滤数据根据你定义的规则,常用的filters如下:

  • grok:  解析无规则的文字并转化为有结构的格式。

  • mutate: 丰富的基础类型处理,包括类型转换、字符串处理、字段处理等。

  • drop: 丢弃一部分events不进行处理,例如: debug events

  • clone: 负责一个event,这个过程中可以添加或删除字段。

  • geoip: 添加地理信息(为前台kibana图形化展示使用)

Outputs:

  • elasticserache elasticserache接收并保存数据,并将数据给kibana前端展示。

  • output 标准输出,直接打印在屏幕上。

4.3 安装

Logstash运行仅仅依赖java运行环境(jre),JDK版本1.8以上即可。直接从ELK官网下载Logstash:https://www.elastic.co/cn/products

 
  1. 1 # tar -zxvf logstash-6.1.0.tar.gz

  2. 2 # cd logstash-6.1.0

现在我们来运行一下一个简单的例子:

1 # bin/logstash -e 'input { stdin { } } output { stdout {} }'

我们现在可以在命令行下输入一些字符,然后我们将看到logstash的输出内容:

 
  1. 1 hello world

  2. 2 2017-11-21T01:22:14.405+0000 0.0.0.0 hello world

Ok,还挺有意思的吧… 以上例子我们在运行logstash中,定义了一个叫”stdin”的input还有一个”stdout”的output,无论我们输入什么字符,Logstash都会按照某种格式来返回我们输入的字符。这里注意我们在命令行中使用了-e参数,该参数允许Logstash直接通过命令行接受设置。这点尤其快速的帮助我们反复的测试配置是否正确而不用写配置文件。 
让我们再试个更有意思的例子。首先我们在命令行下使用CTRL-C命令退出之前运行的Logstash。现在我们重新运行Logstash使用下面的命令:

1 # bin/logstash -e 'input { stdin { } } output { stdout { codec => rubydebug } }'

我们再输入一些字符,这次我们输入”hello world ”:

复制代码

 
  1. 1 hello world2 {

  2. 3 "message" => "hello world",

  3. 4 "@timestamp" => "2017-11-20T23:48:05.335Z",

  4. 5 "@version" => "1",

  5. 6 "host" => "node1"

  6. 7 }

复制代码

以上示例通过重新设置了叫”stdout”的output(添加了”codec”参数),我们就可以改变Logstash的输出表现。

类似的我们可以通过在你的配置文件中添加或者修改inputs、outputs、filters,就可以使随意的格式化日志数据成为可能,

从而订制更合理的存储格式为查询提供便利。 

前面已经说过Logstash必须有一个输入和一个输出,上面的例子表示从终端上输入并输出到终端。

数据在线程之间以事件的形式流传。不要叫行,因为Logstash可以处理多行事件。

input {

    # 输入域,可以使用上面提到的几种输入方式。stdin{} 表示标准输入,file{} 表示从文件读取。

    input的各种插件:     https://www.elastic.co/guide/en/logstash/current/input-plugins.html

}

output {

    #Logstash的功能就是对数据进行加工,上述例子就是Logstash的格式化输出,当然这是最简单的。

    output的各种插件:https://www.elastic.co/guide/en/logstash/current/output-plugins.html

}

4.4 指定配置文件启动

Logstash配置文件和命令:

    Logstash的默认配置已经够我们使用了,从5.0后使用logstash.yml文件,可以将一些命令行参数直接写到YAML文件即可。

  • –configtest 或 -t    用于测试Logstash的配置语法是否正确,非常好的一个参数。

  • –log 或 -l Logstash默认输出日志到标准输出,指定Logstash的日志存放位置

  • –pipeline-workers 或 -w  指定运行filter和output的pipeline线程数量,使用默认就好。

  • -f 指定规则文件,可以将自己的文件放在同一个路径下,使用-f 即可运行。

一个简单的Logstash从文件中读取配置

复制代码

 
  1. 1 vim file.conf #file.conf可以放在任意位置

  2. 2 input {

  3. 3 stdin {

  4. 4 }

  5. 5 }

  6. 6 output {

  7. 7 stdout {

  8. 8 codec=>rubydebug

  9. 9 }

  10. 10 }

  11. 11 ~

  12.  
  13. bin/logstash -f /root/conf/file.conf #启动即可

4.5 常用插件

    grok插件:

    Grok是Logstash最重要的插件,你可以在grok里自定义好命名规则,然后在grok参数或者其他正则表达式中引用它。

    kv插件:自动处理类似于key=value样式的数据

    

   geoip插件:主要是查询IP地址归属地,用来判断访问网站的来源地

4.6 常用自定义配置文件收集参考

https://blog.csdn.net/hellolovelife/article/details/81560278

5 elk  kibana 安装

安装准备文件:kibana-6.3.2-linux-x86_64.tar.gz

1 解压  tar -xzvf kibana-5.2.0-darwin-x86_64.tar.gz

2 设置执行es

   vim /data/kibana-6.3.0/config/kibana.yml

   添加内容:

         server.port: 5601
         server.host: "0.0.0.0"
         elasticsearch.url: "http://127.0.0.1:9200"

 3 切换到bin启动

       ./kibana

       后台启动:
                         nohup ./kibana &

  4 查看日志

6 elk结合项目日志/结合监控接口

6.1 实现日志的Json格式化

        依赖:logstash-logback-encoder

        原理:SpringBoot默认使用logback来记录日志,而Logstash自身也有对logback日志工具的支持工具,

                    所以可以直接通过在logback配置中增加Logstash的Appender来非常方便的将日志转化为Json的格式存储和输出了。

        实践: logback-spring.xml:logstash集成的配置信息,

                  在我的项目中项目跟目录下和/src/main/resources下各有一个logback-spring.xml文件,分别代表两种部署方式。

                   bootstrap.properties:里面只有一行配置,是logback-spring.xml中需要到的参数,

                   由于logback-spring.xml的加载在application.yml之前,

                   所以讲spring.application.name的配置信息定义在最先加载的bootstrap.properties文件中。

    

                   配置文件加载顺序:bootstarp.properties  >>>ogback-spring.xml >>>  application.yml

6.2 实现步奏

       1 maven 引入logstash-logback-encoder

               <!-- 日志发送到logstash  -->
              <dependency>
                    <groupId>net.logstash.logback</groupId>
                   <artifactId>logstash-logback-encoder</artifactId>
                   <version>5.2</version>
               </dependency>

        2 编写log4j_to_es.xml

                  logback_to_es.xml

       

        3 启动logstash

             ./logstash -f ../config/log4j_to_es.conf

             error:

                      Couldn't find any input plugin named 'log4j'. Are you sure this is correct?

                      Trying to load the log4j input plugin resulted in this error

             解决:

                       ./logstash-plugin install logstash-input-log4j

            继续启动:

猜你喜欢

转载自blog.csdn.net/hellolovelife/article/details/81567483
elk