springcloud的日志中心ELK搭建

背景:

我们在服务部署很多的应用,但是有时候服务器会报错或者启动失败等等,我们就需要去服务器看日志,看看是什么问题,如果我们部署很多,那么查看日志就会很繁琐。

这里就引入日志中心,来汇聚所有服务的日志,并且提供了可视化界面来看日志,这样就便捷很多。

过程中看了很多人的帖子,我这里也记录一下搭建过程

ELK它是3个产品的缩写,E就是ElasticSearch(搜索引擎,处理数据),L就是Logstash(接受日志),K就是Kibana(展示数据)3个独立可以运行的产品、linux存在一个整体的docker容器,直接可以 一次性启动3个(因为启动过程不好把控,建议单独一个一个安装,后续自己打docker)。

docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -e ES_MIN_MEM=128m -e ES_MAX_MEM=1024m -it --name elk sebp/elk

5601 - Kibana web 接口

9200 - Elasticsearch JSON 接口

5044 - Logstash 日志接收接口

提供3个访问接口

运行过程中的问题

Starting Elasticsearch Server future versions of Elasticsearch will require Java 11; your Java version from [/usr/lib/jvm/java-8-openjdk-amd64/jre] does not meet this requirement

原因:这是ES的一种安全措施,不让用root用户,下面提到过

解决方案:1. 下载docker pull sebp/elk:683其他版本

                  2.(未尝试暂不建议使用,只提供思路)找到sebp/elk的dockerfile,将创建用户等语句放在里面,https://hub.docker.com/r/sebp/elk/dockerfile

                   3. 我在百度es root身份不能启动的时候,发现有这样的解决方法。如图

之前我看过dockerfile的 代码,最后写着

于是去看了start.sh发现其中有对应的参数,所以我们可以在这里设置allow.root = true

所以遇到问题 要多去了解,尽可能从不同角度去看解决问题

 

我先采用1方案

--  elk一些帮助文档    https://ixjx.gitbooks.io/docker-elk-doc

1方案启动,还会报错,

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

原因:vm.max_map_count至少需要262144,附永久修改vm.max_map_count

解决方案: vi /etc/sysctl.conf    添加 一行 vm.max_map_count=655360    

加载参数  sysctl -p

这里介绍如何分别部署,以及应用监听

 

启动成功后就是修改配置来使用,具体可以看dockerfile来找配置文件

/etc/logstash/conf.d/02-beats-input.conf

1. 搭建Elasticsearch

下载安装Elasticsearch,官网地址:https://www.elastic.co/downloads/elasticsearch

可以安装windows或者 linux版本

linux版:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.2.tar.gz

tar -xvf elasticsearch-6.3.2.tar.gz

sudo chown -R es:elasticsearch elasticsearch-6.3.2

从5.0开始 elasticsearch 安全级别提高了 不允许采用root帐号启动 所以我们要添加一个用户用来启动 elasticsearch

useradd es
chown -R es:es /usr/local/elasticsearch-6.2.4///把目录权限赋予给es用户
su es//切换至es用户

修改elasticsearch.yml

cluster.name: my-application

node.name: node-1

network.host: 0.0.0.0 

http.port: 9200

#因为Centos6不支持SecComp,而ES默认bootstrap.system_call_filter为true进行检测

bootstrap.memory_lock: false
bootstrap.system_call_filter: false



vim /etc/sysctl.conf
在文件最后面添加内容:

vm.max_map_count=262144

保存退出后,使用sysctl -p 刷新生效

修改文件/etc/security/limits.conf

添加
* hard nofile 65536
* soft nofile 65536
 
* soft nproc 2048
* hard nproc 4096 


启动elasticesearch 可能还会报如下错误

max number of threads [1024] for user [lish] likely too low, increase to at least [4096]

解决:切换到root用户,进入limits.d目录下修改配置文件。

vi /etc/security/limits.d/90-nproc.conf

修改如下内容:

* soft nproc 1024

#修改为

* soft nproc 4096

 

2. 搭建Logstash

在每个微服务应用中引入pom依赖,之后在/src/main/resources/路径下配置logback.xml。与zipkin类似,每个服务给logstash发送消息(ELK安装好后需要在etc/logstash/conf.d/中的配置文件修改,它会进行整合然后启动)

<dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
            <version>6.1</version>
</dependency>
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <contextName>ProviderLog</contextName>
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <!--本工程中没使用文件输出日志,只用了console和logstash,此处配置无用-->
    <property name="LOG_HOME" value="D:/" />
    <!--可以手动指定log名字-->
    <property name="appName" value="auth" />
    <!--也可以使用工程的名字-->
    <springProperty scope="context" name="springAppName" source="spring.application.name"/>
    <springProperty scope="context" name="serverPort" source="server.port"/>
    <!-- logstash远程日志配置-->
    <appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>127.0.0.1:5044</destination>
        <!--        默认是JSON格式,所以logstash中应该配置codec为json_lines-->
        <!--        LoggingEventCompositeJsonEncoder是LogstashEncoder的父类,可以使用pattern自定义json的关键字
        -->
        <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder" >
            <!--        <encoder class="net.logstash.logback.encoder.LogstashEncoder" >-->
            <providers>
                <!--可以配合LogstashEncoder使用-->
                <!--                <timestamp/>-->
                <!--                <version/>-->
                <!--                <message/>-->
                <!--                <loggerName/>-->
                <!--                <threadName/>-->
                <!--                <logLevel/>-->
                <!--                <callerData/>-->
                <timestamp>
                    <timeZone>UTC</timeZone>
                </timestamp>
                <pattern>
                    <pattern>
                        <!--或者使用"app": "${appName}",-->
                        <!--                        都是sleuth的,本处没用到-->
                        <!--                        "trace": "%X{X-B3-TraceId:-}",-->
                        <!--                        "span": "%X{X-B3-SpanId:-}",-->
                        <!--                        "parent": "%X{X-B3-ParentSpanId:-}",-->
                        <!--                        "stack_trace": "%exception{10},"-->
                        {
                        "app": "${springAppName}_${serverPort}",
                        "level": "%level",
                        "thread": "%thread",
                        "class": "%logger{40}",
                        "message": "%message"
                        }
                    </pattern>
                </pattern>

            </providers>
        </encoder>
    </appender>
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>
    <!-- 按照每天生成日志文件 -->
    <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/system.log.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <!-- 日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="stash" />
        <appender-ref ref="STDOUT" />
        <!--        <appender-ref ref="FILE" />-->
    </root>
</configuration>

安装logstash

Logstash 是一个实时数据收集引擎,可收集各类型数据并对其进行分析,过滤和归纳。按照自己条件分析过滤出符合数据导入到可视化界面。它可以实现多样化的数据源数据全量或增量传输,数据标准格式处理,数据格式化输出等的功能,常用于日志处理。工作流程分为三个阶段:

  (1)input数据输入阶段,可接收oracle、mysql、postgresql、file等多种数据源;
  (2)filter数据标准格式化阶段,可过滤、格式化数据,如格式化时间、字符串等;
  (3)output数据输出阶段,可输出到elasticsearch、mongodb、kfka等接收终端

路径:https://www.elastic.co/downloads/logstash

linux版:

下载
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.6.0.tar.gz
解压
tar –zxvf logstash-6.6.0.tar.gz
重命名
mv logstash-6.6.0 logstash
与redis类似
创建xxx.conf,然后  执行   ./logstash -f ../test/xxx.conf
input{
    file{
        path =>"/home/logstash/logstash-5.4.0/test/access_log.2018-04-10.log"
        start_position=>"beginning"
    }
}

filter{
    grok{
        match=>{
            "message"=>"%{DATA:clientIp} - - \[%{HTTPDATE:accessTime}\] \"%{DATA:method} %{DATA:requestPath} %{DATA:httpversion}\" %{DATA:retcode} %{DATA:size} \"%{DATA:fromHtml}\" \"%{DATA:useragent}\""
        }

        remove_field=>"message"
    }
    date{
        match=>["accessTime","dd/MMM/yyyy:HH:mm:ss Z"]
    }
}

output{
    stdout{
        codec=>rubydebug
    }
}

可以指定从哪里读取日志文件,或者给定目录读取所有文件

windows版:

下载好,解压到elasticsearch同级目录方便管理

接收控制台输入,Logstash解析输出到ElasticSearch集群

input{
 2         stdin {}
 3 }
 4 output {
 5         elasticsearch {
 6                 hosts => ["127.0.0.1:9200"]
 7                 index => "yj_index"
 8         }
 9         stdout { codec => rubydebug}
10 }

3. 搭建Kibana

wget https://artifacts.elastic.co/downloads/kibana/kibana-6.3.2-linux-x86_64.tar.gz

tar -zxvf kibana-6.3.2-linux-x86_64.tar.gz

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

# 放开注释,将默认配置改成如下:

server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://192.168.12.121:9200"
kibana.index: ".kibana"


启动
bin/kibana

windows版:

地址:https://www.elastic.co/downloads/kibana

下载,解压,修改kibana.yml文件

设置elasticsearch.url为启动的elasticsearch   http://localhost:9200/

进入kibana的bin目录,双击kibana.bat

http://localhost:5601

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值