rev:删除loki

This commit is contained in:
2023-12-19 08:51:01 +08:00
parent 6713250a56
commit a3c6f9bb3b
6 changed files with 56 additions and 239 deletions

View File

@@ -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>

View File

@@ -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);
}
}

View File

@@ -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();
}

View File

@@ -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;
}
}

View File

@@ -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;
} }

View File

@@ -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 -->