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)