docker中安裝elk

1.安裝elk
1.1:獲取最新的鏡像:
docker pull sebp/elk

在這裏插入圖片描述

1.2:啓動鏡像
docker run -d -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -p 5601:5601 -p 5044:5044 -p 9200:9200 -p 9300:9300 -it --restart=always --name elk c21727ae794b

啓動後等會可以通過瀏覽器訪問ip:5601及ip:9200查看是否已啓動。–restart=always表示自啓動
如出現以下錯誤:

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

解決:

## 執行
sysctl -w vm.max_map_count=262144

編輯/etc/sysctl.conf,在裏面加入:vm.max_map_count=262144

1.3:修改配置
## 進入容器
docker exec -it elk /bin/bash
## 編輯配置文件
vim /etc/logstash/conf.d/02-beats-input.conf 

編輯的內容如下:

input {
    tcp {
        port => 5044
        codec => json_lines
    }
}
output{
    elasticsearch {
    hosts => ["localhost:9200"]
    index => "ruizhi-log-%{+YYYY.MM.dd}"
    }
}

退出後,重啓elkdocker restart elk,訪問9200和5601可以看見如下界面:
在這裏插入圖片描述
在這裏插入圖片描述
如果進入後,都能正常訪問說明正常,此時進入kiban中的manage,創建索引。輸入ruizhi-log-*去匹配,然後點擊下一步,選擇@timestamp。
在這裏插入圖片描述
如果出現You'll need to index some data into Elasticsearch before you can create an index pattern或者輸入後下一步爲灰,這是因爲裏面沒有數據導致的,在命令行輸入一個假的數據即可。

curl -H "Content-Type: application/json" -XPOST 'http://192.168.80.129:9200/ruizhi-log-2020-04-25/test-log' -d '{"code":200,"message":"測試"}'

在這裏插入圖片描述

2.springcloud中配置
2.1 jar包配置
 <dependency>
    <groupId>net.logstash.logback</groupId>
     <artifactId>logstash-logback-encoder</artifactId>
     <version>6.1</version>
 </dependency>
2.2 logback.xml配置
<?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="wdnmdService" />
    <!--也可以使用工程的名字-->
    <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>192.168.80.129: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>
2.3 輸出日誌
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Author: 
 * @Date: 2020-03-18 15:05
 * @Description:
 */
@RestController
@RequestMapping("/contractInfo")
@Api(tags = "客戶端合同信息-用戶信息api")
public class ContractInfoController {

    Logger logger = LoggerFactory.getLogger("ContractInfoController");

    /**
     * 合同信息-分頁
     *
     * @param dto 分頁需要的參數
     * @return
     */
    @ApiOperation(value = "合同信息分頁", httpMethod = "POST")
    @RequestMapping(value = "/pageContractInfo", method = RequestMethod.POST)
    public void pageContractInfo(@RequestBody ContractInfoPageDto dto) {
        logger.info("分頁合同數據");
        logger.info("分頁合同請求,數據:" + dto);
    }
}

配置好啓動後就可以http://192.168.80.129:5601/中看見相關日誌。(第一次時,需要在Management中的Kibana下的Index patterns添加配置。Index pattern爲*,方式選@timestamp)
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章