rev:删除loki
This commit is contained in:
@@ -206,15 +206,15 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.oshi</groupId>
|
<groupId>com.github.oshi</groupId>
|
||||||
<artifactId>oshi-core</artifactId>
|
<artifactId>oshi-core</artifactId>
|
||||||
<version>5.0.1</version>
|
<version>5.5.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!--loki-->
|
<!--loki-->
|
||||||
<!-- https://loki4j.github.io/loki-logback-appender/#quick-start -->
|
<!-- https://loki4j.github.io/loki-logback-appender/#quick-start -->
|
||||||
<dependency>
|
<!-- <dependency>-->
|
||||||
<groupId>com.github.loki4j</groupId>
|
<!-- <groupId>com.github.loki4j</groupId>-->
|
||||||
<artifactId>loki-logback-appender-jdk8</artifactId>
|
<!-- <artifactId>loki-logback-appender-jdk8</artifactId>-->
|
||||||
<version>1.3.2</version>
|
<!-- <version>1.3.2</version>-->
|
||||||
</dependency>
|
<!-- </dependency>-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.httpcomponents</groupId>
|
<groupId>org.apache.httpcomponents</groupId>
|
||||||
<artifactId>httpclient</artifactId>
|
<artifactId>httpclient</artifactId>
|
||||||
|
|||||||
@@ -1,40 +0,0 @@
|
|||||||
package org.nl.modules.loki.rest;
|
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
|
||||||
import io.swagger.annotations.Api;
|
|
||||||
import io.swagger.annotations.ApiOperation;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.nl.modules.common.annotation.RateLimiter;
|
|
||||||
import org.nl.modules.loki.service.LokiService;
|
|
||||||
import org.springframework.http.HttpStatus;
|
|
||||||
import org.springframework.http.ResponseEntity;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @Author: lyd
|
|
||||||
* @Description: 日志监控
|
|
||||||
* @Date: 2022-08-15
|
|
||||||
*/
|
|
||||||
@RestController
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
@Api(tags = "日志监控")
|
|
||||||
@RequestMapping("/api/loki")
|
|
||||||
@Slf4j
|
|
||||||
public class LokiController {
|
|
||||||
|
|
||||||
private final LokiService lokiService;
|
|
||||||
|
|
||||||
@GetMapping("/labels/values")
|
|
||||||
@ApiOperation("获取标签")
|
|
||||||
public ResponseEntity<Object> labelsValues() {
|
|
||||||
return new ResponseEntity<>(lokiService.getLabelsValues(), HttpStatus.OK);
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping("/logs")
|
|
||||||
@ApiOperation("获取日志")
|
|
||||||
@RateLimiter(value = 1, timeout = 300) // 限流
|
|
||||||
public ResponseEntity<Object> getLogData(@RequestBody JSONObject json) {
|
|
||||||
return new ResponseEntity<>(lokiService.getLogData(json), HttpStatus.OK);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
package org.nl.modules.loki.service;
|
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONArray;
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @Author: lyd
|
|
||||||
* @Description: 服务类
|
|
||||||
* @Date: 2022-08-15
|
|
||||||
*/
|
|
||||||
public interface LokiService {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取日志信息
|
|
||||||
* @param json
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
JSONObject getLogData(JSONObject json);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取labels和values树
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
JSONArray getLabelsValues();
|
|
||||||
}
|
|
||||||
@@ -1,113 +0,0 @@
|
|||||||
package org.nl.modules.loki.service.impl;
|
|
||||||
|
|
||||||
import cn.hutool.core.util.CharsetUtil;
|
|
||||||
import cn.hutool.http.HttpUtil;
|
|
||||||
import com.alibaba.fastjson.JSONArray;
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.nl.modules.loki.service.LokiService;
|
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @Author: lyd
|
|
||||||
* @Description: 实现类
|
|
||||||
* @Date: 2022-08-15
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public class LokiServiceImpl implements LokiService {
|
|
||||||
|
|
||||||
@Value("${loki.url}")
|
|
||||||
private String lokiUrl;
|
|
||||||
|
|
||||||
@Value("${loki.systemName}")
|
|
||||||
private String systemName;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public JSONObject getLogData(JSONObject json) {
|
|
||||||
String logLabel = "";
|
|
||||||
String logLabelValue = "";
|
|
||||||
Long start = 0L;
|
|
||||||
Long end = 0L;
|
|
||||||
String text = "";
|
|
||||||
String limit = "100";
|
|
||||||
String direction = "backward";
|
|
||||||
if (json.get("logLabel") != null) logLabel = json.getString("logLabel");
|
|
||||||
if (json.get("logLabelValue") != null) logLabelValue = json.getString("logLabelValue");
|
|
||||||
if (json.get("text") != null) text = json.getString("text");
|
|
||||||
if (json.get("start") != null) start = json.getLong("start");
|
|
||||||
if (json.get("end") != null) end = json.getLong("end");
|
|
||||||
if (json.get("limits") != null) limit = json.getString("limits");
|
|
||||||
if (json.get("direction") != null) direction = json.getString("direction");
|
|
||||||
/**
|
|
||||||
* 组织参数
|
|
||||||
* 纳秒数
|
|
||||||
* 1660037391880000000
|
|
||||||
* 1641453208415000000
|
|
||||||
* http://localhost:3100/loki/api/v1/query_range?query={host="localhost"} |= ``&limit=1500&start=1641453208415000000&end=1660027623419419002
|
|
||||||
*/
|
|
||||||
JSONObject parse = null;
|
|
||||||
String query = lokiUrl + "/query_range?query={system=\"" + systemName + "\", " + logLabel + "=\"" + logLabelValue + "\"} |= `" + text + "`";
|
|
||||||
String result = "";
|
|
||||||
if (start==0L) {
|
|
||||||
result = HttpUtil.get(query + "&limit=" + limit + "&direction=" + direction, CharsetUtil.CHARSET_UTF_8);
|
|
||||||
} else {
|
|
||||||
result = HttpUtil.get(query + "&limit=" + limit + "&start=" + start + "&end=" + end + "&direction=" + direction, CharsetUtil.CHARSET_UTF_8);
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
parse = (JSONObject) JSONObject.parse(result);
|
|
||||||
} catch (Exception e) {
|
|
||||||
// reslut的值可能为:too many outstanding requests,无法转化成Json
|
|
||||||
System.out.println("reslut:" + result);
|
|
||||||
// e.printStackTrace();
|
|
||||||
}
|
|
||||||
return parse;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取labels和values树
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public JSONArray getLabelsValues() {
|
|
||||||
/**
|
|
||||||
* [{
|
|
||||||
* label:
|
|
||||||
* value:
|
|
||||||
* children:[{
|
|
||||||
* label
|
|
||||||
* value
|
|
||||||
* }]
|
|
||||||
* }]
|
|
||||||
*/
|
|
||||||
JSONArray result = new JSONArray();
|
|
||||||
// 获取所有标签
|
|
||||||
String labelString = HttpUtil.get(lokiUrl + "/labels", CharsetUtil.CHARSET_UTF_8);
|
|
||||||
JSONObject parse = (JSONObject) JSONObject.parse(labelString);
|
|
||||||
JSONArray labels = parse.getJSONArray("data");
|
|
||||||
for (int i=0; i<labels.size(); i++) {
|
|
||||||
// 获取标签下的所有值
|
|
||||||
String valueString = HttpUtil.get(lokiUrl + "/label/" + labels.getString(i) + "/values", CharsetUtil.CHARSET_UTF_8);
|
|
||||||
JSONObject parse2 = (JSONObject) JSONObject.parse(valueString);
|
|
||||||
JSONArray values = parse2.getJSONArray("data");
|
|
||||||
JSONArray children = new JSONArray();
|
|
||||||
// 组成树形状态 两级
|
|
||||||
for (int j=0; j<values.size(); j++) {
|
|
||||||
JSONObject leaf = new JSONObject();
|
|
||||||
leaf.put("label", values.getString(j));
|
|
||||||
leaf.put("value", values.getString(j));
|
|
||||||
children.add(leaf);
|
|
||||||
}
|
|
||||||
|
|
||||||
JSONObject node = new JSONObject();
|
|
||||||
node.put("label", labels.getString(i));
|
|
||||||
node.put("value", labels.getString(i));
|
|
||||||
node.put("children", children);
|
|
||||||
result.add(node);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -20,11 +20,6 @@ import java.util.Map;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
public class LuceneServiceImpl implements LuceneService {
|
public class LuceneServiceImpl implements LuceneService {
|
||||||
|
|
||||||
@Value("${loki.url}")
|
|
||||||
private String lokiUrl;
|
|
||||||
|
|
||||||
@Value("${loki.systemName}")
|
|
||||||
private String systemName;
|
|
||||||
|
|
||||||
//日志索引目录
|
//日志索引目录
|
||||||
@Value("${lucene.index.path}")
|
@Value("${lucene.index.path}")
|
||||||
@@ -39,29 +34,29 @@ public class LuceneServiceImpl implements LuceneService {
|
|||||||
public JSONArray getLabelsValues() {
|
public JSONArray getLabelsValues() {
|
||||||
JSONArray result = new JSONArray();
|
JSONArray result = new JSONArray();
|
||||||
// 获取所有标签
|
// 获取所有标签
|
||||||
String labelString = HttpUtil.get(lokiUrl + "/labels", CharsetUtil.CHARSET_UTF_8);
|
// String labelString = HttpUtil.get(lokiUrl + "/labels", CharsetUtil.CHARSET_UTF_8);
|
||||||
JSONObject parse = (JSONObject) JSONObject.parse(labelString);
|
// JSONObject parse = (JSONObject) JSONObject.parse(labelString);
|
||||||
JSONArray labels = parse.getJSONArray("data");
|
// JSONArray labels = parse.getJSONArray("data");
|
||||||
for (int i=0; i<labels.size(); i++) {
|
// for (int i=0; i<labels.size(); i++) {
|
||||||
// 获取标签下的所有值
|
// // 获取标签下的所有值
|
||||||
String valueString = HttpUtil.get(lokiUrl + "/label/" + labels.getString(i) + "/values", CharsetUtil.CHARSET_UTF_8);
|
// String valueString = HttpUtil.get(lokiUrl + "/label/" + labels.getString(i) + "/values", CharsetUtil.CHARSET_UTF_8);
|
||||||
JSONObject parse2 = (JSONObject) JSONObject.parse(valueString);
|
// JSONObject parse2 = (JSONObject) JSONObject.parse(valueString);
|
||||||
JSONArray values = parse2.getJSONArray("data");
|
// JSONArray values = parse2.getJSONArray("data");
|
||||||
JSONArray children = new JSONArray();
|
// JSONArray children = new JSONArray();
|
||||||
// 组成树形状态 两级
|
// // 组成树形状态 两级
|
||||||
for (int j=0; j<values.size(); j++) {
|
// for (int j=0; j<values.size(); j++) {
|
||||||
JSONObject leaf = new JSONObject();
|
// JSONObject leaf = new JSONObject();
|
||||||
leaf.put("label", values.getString(j));
|
// leaf.put("label", values.getString(j));
|
||||||
leaf.put("value", values.getString(j));
|
// leaf.put("value", values.getString(j));
|
||||||
children.add(leaf);
|
// children.add(leaf);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
JSONObject node = new JSONObject();
|
// JSONObject node = new JSONObject();
|
||||||
node.put("label", labels.getString(i));
|
// node.put("label", labels.getString(i));
|
||||||
node.put("value", labels.getString(i));
|
// node.put("value", labels.getString(i));
|
||||||
node.put("children", children);
|
// node.put("children", children);
|
||||||
result.add(node);
|
// result.add(node);
|
||||||
}
|
// }
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ https://juejin.cn/post/6844903775631572999
|
|||||||
<property name="log.pattern"
|
<property name="log.pattern"
|
||||||
value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %gray(%msg%n)"/>
|
value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %gray(%msg%n)"/>
|
||||||
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
|
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
|
||||||
<springProperty scope="context" name="lokiUrl" source="loki.url"/>
|
<!-- <springProperty scope="context" name="lokiUrl" source="loki.url"/>-->
|
||||||
<springProperty scope="context" name="systemName" source="loki.systemName"/>
|
<springProperty scope="context" name="systemName" source="loki.systemName"/>
|
||||||
<property name="LOKI_URL" value="${lokiUrl}"/>
|
<!-- <property name="LOKI_URL" value="${lokiUrl}"/>-->
|
||||||
<property name="SYSTEM_NAME" value="${systemName}"/>
|
<property name="SYSTEM_NAME" value="${systemName}"/>
|
||||||
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
|
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
|
||||||
<property name="LOG_HOME" value="${logPath}"/>
|
<property name="LOG_HOME" value="${logPath}"/>
|
||||||
@@ -68,23 +68,23 @@ https://juejin.cn/post/6844903775631572999
|
|||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
<!--添加loki-->
|
<!--添加loki-->
|
||||||
<appender name="lokiAppender" class="com.github.loki4j.logback.Loki4jAppender">
|
<!-- <appender name="lokiAppender" class="com.github.loki4j.logback.Loki4jAppender">-->
|
||||||
<batchTimeoutMs>1000</batchTimeoutMs>
|
<!-- <batchTimeoutMs>1000</batchTimeoutMs>-->
|
||||||
<http class="com.github.loki4j.logback.ApacheHttpSender">
|
<!-- <http class="com.github.loki4j.logback.ApacheHttpSender">-->
|
||||||
<url>${LOKI_URL}/push</url>
|
<!-- <url>${LOKI_URL}/push</url>-->
|
||||||
</http>
|
<!-- </http>-->
|
||||||
<format>
|
<!-- <format>-->
|
||||||
<label>
|
<!-- <label>-->
|
||||||
<pattern>
|
<!-- <pattern>-->
|
||||||
system=${SYSTEM_NAME},level=%level,logType=%X{log_file_type:-logType},device=%X{device_code_log:-device}
|
<!-- system=${SYSTEM_NAME},level=%level,logType=%X{log_file_type:-logType},device=%X{device_code_log:-device}-->
|
||||||
</pattern>
|
<!-- </pattern>-->
|
||||||
</label>
|
<!-- </label>-->
|
||||||
<message>
|
<!-- <message>-->
|
||||||
<pattern>${log.pattern}</pattern>
|
<!-- <pattern>${log.pattern}</pattern>-->
|
||||||
</message>
|
<!-- </message>-->
|
||||||
<sortByTime>true</sortByTime>
|
<!-- <sortByTime>true</sortByTime>-->
|
||||||
</format>
|
<!-- </format>-->
|
||||||
</appender>
|
<!-- </appender>-->
|
||||||
|
|
||||||
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||||
@@ -111,21 +111,21 @@ https://juejin.cn/post/6844903775631572999
|
|||||||
<springProfile name="dev">
|
<springProfile name="dev">
|
||||||
<root level="info">
|
<root level="info">
|
||||||
<appender-ref ref="CONSOLE"/>
|
<appender-ref ref="CONSOLE"/>
|
||||||
<appender-ref ref="lokiAppender"/>
|
<!-- <appender-ref ref="lokiAppender"/>-->
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
</root>
|
</root>
|
||||||
<!--logmanage -->
|
<!--logmanage -->
|
||||||
<logger name="org.nl.acs.log.service.impl.DeviceExecuteLogServiceImpl" level="info" additivity="false">
|
<logger name="org.nl.acs.log.service.impl.DeviceExecuteLogServiceImpl" level="info" additivity="false">
|
||||||
<appender-ref ref="CONSOLE"/>
|
<appender-ref ref="CONSOLE"/>
|
||||||
<appender-ref ref="lokiAppender"/>
|
<!-- <appender-ref ref="lokiAppender"/>-->
|
||||||
</logger>
|
</logger>
|
||||||
<logger name="jdbc.resultsettable" level="ERROR" additivity="false">
|
<logger name="jdbc.resultsettable" level="ERROR" additivity="false">
|
||||||
<appender-ref ref="CONSOLE"/>
|
<appender-ref ref="CONSOLE"/>
|
||||||
<appender-ref ref="lokiAppender"/>
|
<!-- <appender-ref ref="lokiAppender"/>-->
|
||||||
</logger>
|
</logger>
|
||||||
<logger name="org.openscada.opc.lib.da.Server" level="ERROR" additivity="false">
|
<logger name="org.openscada.opc.lib.da.Server" level="ERROR" additivity="false">
|
||||||
<appender-ref ref="CONSOLE"/>
|
<appender-ref ref="CONSOLE"/>
|
||||||
<appender-ref ref="lokiAppender"/>
|
<!-- <appender-ref ref="lokiAppender"/>-->
|
||||||
</logger>
|
</logger>
|
||||||
<!--logmanage -->
|
<!--logmanage -->
|
||||||
|
|
||||||
@@ -165,20 +165,20 @@ https://juejin.cn/post/6844903775631572999
|
|||||||
<springProfile name="prod">
|
<springProfile name="prod">
|
||||||
<root level="info">
|
<root level="info">
|
||||||
<appender-ref ref="ERROR"/>
|
<appender-ref ref="ERROR"/>
|
||||||
<appender-ref ref="lokiAppender"/>
|
<!-- <appender-ref ref="lokiAppender"/>-->
|
||||||
<appender-ref ref="asyncFileAppender"/>
|
<appender-ref ref="asyncFileAppender"/>
|
||||||
</root>
|
</root>
|
||||||
<!--logmanage -->
|
<!--logmanage -->
|
||||||
<logger name="org.nl.acs.log.service.impl.DeviceExecuteLogServiceImpl" level="info" additivity="false">
|
<logger name="org.nl.acs.log.service.impl.DeviceExecuteLogServiceImpl" level="info" additivity="false">
|
||||||
<appender-ref ref="lokiAppender"/>
|
<!-- <appender-ref ref="lokiAppender"/>-->
|
||||||
</logger>
|
</logger>
|
||||||
<logger name="jdbc.resultsettable" level="ERROR" additivity="false">
|
<logger name="jdbc.resultsettable" level="ERROR" additivity="false">
|
||||||
<appender-ref ref="CONSOLE"/>
|
<appender-ref ref="CONSOLE"/>
|
||||||
<appender-ref ref="lokiAppender"/>
|
<!-- <appender-ref ref="lokiAppender"/>-->
|
||||||
</logger>
|
</logger>
|
||||||
<logger name="org.openscada.opc.lib.da.Server" level="ERROR" additivity="false">
|
<logger name="org.openscada.opc.lib.da.Server" level="ERROR" additivity="false">
|
||||||
<appender-ref ref="CONSOLE"/>
|
<appender-ref ref="CONSOLE"/>
|
||||||
<appender-ref ref="lokiAppender"/>
|
<!-- <appender-ref ref="lokiAppender"/>-->
|
||||||
</logger>
|
</logger>
|
||||||
<!--logmanage -->
|
<!--logmanage -->
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user