🍬Сделай это просто, сделай это просто.
Этот инструмент для мониторинга ошибок предназначен для небольших проектов. Он создан для удобства разработчиков в быстром определении проблем, снижении затрат на коммуникацию и повышении производительности разработки. Основные идеи — легковесность, быстрое использование и готовое к применению решение. Это позволяет разработчикам или лицам, интересующимся подобными вопросами, минимизировать затраты на создание крупномасштабных промежуточных компонентов. Если требуется создание крупномасштабных промежуточных компонентов и услуг, это может привести к потерям времени, энергии и финансовых затрат. Этот инструмент создан для того, чтобы помочь малым предприятиям минимизировать указанные выше затраты.### 🧬Системные требования
Для одиночной машины это обеспечивает хорошую производительность. Для распределенной среды рекомендуется заменить событие на MQ1. [x] Реализация обертки аспекта для перехвата исключений, создание нового типа исключения主要用于异常推送监控, правила перехвата аспектом и логирования одинаковы и включают в себя [@RequestMapping, @GetMapping, @PostMapping], метод перехвата — обертка, не влияет на использование исходной функциональности.
<dependency>
<groupId>io.gitee.goslee</groupId>
<artifactId>spring-boot-starter-simple-prometheus</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>net.jodah</groupId>
<artifactId>expiringmap</artifactId>
<version>0.5.8</version>
<optional>true</optional>
</dependency>
sprometheus: default: "feishu" feishu: # Включить уведомления об исключениях enabled: true # Необходимые пути для трассировки includedTracePackage: - "com.gosling" - "com.mysql" - "java.sql.SQLException" - "java.net" # Уведомления в группу Feishu business: # Группа бизнес-уведомлений Feishu - url: "https://open.feishu.cn/open-apis/bot/v2/hook/xxx" code: ",200000,200001,200002,200003," developer: # Группа разработчиков Feishu - url: "https://open.feishu.cn/open-apis/bot/v2/hook/xxx" code: ",500,"
```yaml
# Мониторинг
sprometheus:
default: "dingdung"
dingdung:
# Включение или отключение аномальных уведомлений
enabled: true
# Путь к пакетам трейса, которые должны быть включены
includedTracePackage:
- "com.gosling"
- "com.mysql"
- "java.sql.SQLException"
- "java.net"
# Уведомления в группе Дингдунг
business:
# Группа уведомлений для бизнеса 1 Дингдунг
- url: "https://oapi.dingtalk.com/robot/send?access_token=3c36"
code: ",200000,200001,200002,200003,"
secret: "SEC9a6b2202a0b92847fd7098630d20b4"
developer:
# Группа уведомлений для разработчиков Дингдунг
- url: "https://oapi.dingtalk.com/robot/send?access_token=3c36"
code: ",500,"
secret: "SEC9a6b2202a0b92847fd7098630d20b4"
```- Конфигурационные инструкции
```yaml
# Мониторинг
sprometheus:
default: "feishu"
feishu:
# Включить уведомления об исключениях
enabled: true
# Необходимые пути для трассировки
includedTracePackage:
- "com.gosling"
- "com.mysql"
- "java.sql.SQLException"
- "java.net"
# Уведомления в группу Feishu
business:
# Группа бизнес-уведомлений Feishu
- url: "https://open.feishu.cn/open-apis/bot/v2/hook/xxx"
code: ",200000,200001,200002,200003,"
developer:
# Группа разработчиков Feishu
- url: "https://open.feishu.cn/open-apis/bot/v2/hook/xxx"
code: ",500,"
```- Конфигурационные инструкции
```yaml
# Мониторинг
sprometheus:
default: "dingdung"
dingdung:
# Включение или отключение аномальных уведомлений
enabled: true
# Путь к пакетам трейса, которые должны быть включены
includedTracePackage:
- "com.gosling"
- "com.mysql"
- "java.sql.SQLException"
- "java.net"
# Уведомления в группе Дингдунг
business:
# Группа уведомлений для бизнеса 1 Дингдунг
- url: "https://oapi.dingtalk.com/robot/send?access_token=3c36"
code: ",200000,200001,200002,200003,"
secret: "SEC9a6b2202a0b92847fd7098630d20b4"
developer:
# Группа уведомлений для разработчиков Дингдунг
- url: "https://oapi.dingtalk.com/robot/send?access_token=3c36"
code: ",500,"
secret: "SEC9a6b2202a0b92847fd7098630d20b4"
```- Конфигурационные инструкции
```yaml
# Мониторинг
sprometheus:
default: "feishu"
feishu:
# Включить уведомления об исключениях
enabled: true
# Необходимые пути для трассировки
includedTracePackage:
- "com.gosling"
- "com.mysql"
- "java.sql.SQLException"
- "java.net"
# Уведомления в группу Feishu
business:
# Группа бизнес-уведомлений Feishu
- url: "https://open.feishu.cn/open-apis/bot/v2/hook/xxx"
code: ",200000,200001,200002,200003,"
developer:
# Группа разработчиков Feishu
- url: "https://open.feishu.cn/open-apis/bot/v2/hook/xxx"
code: ",500,"
```- Конфигурационные инструкции
```yaml
# Мониторинг
sprometheus:
default: "dingdung"
dingdung:
# Включение или отключение аномальных уведомлений
enabled: true
# Путь к пакетам трейса, которые должны быть включены
includedTracePackage:
- "com.gosling"
- "com.mysql"
- "java.sql.SQLException"
- "java.net"
# Уведомления в группе Дингдунг
business:
# Группа уведомлений для бизнеса 1 Дингдунг
- url: "https://oapi.dingtalk.com/robot/send?access_token=3c36"
code: ",200000,200001,200002,200003,"
secret: "SEC9a6b2202a0b92847fd7098630d20b4"
developer:
# Группа уведомлений для разработчиков Дингдунг
- url: "https://oapi.dingtalk.com/robot/send?access_token=3c36"
code: ",500,"
secret: "SEC9a6b2202a0b92847fd7098630d20b4"
```- Конфигурационные инструкции| Название | Тип параметра | Описание | Обязательное |
|------------------------|---------|-----------------------------|------|
| default | string | Указание конфигурации по умолчанию для отправки | Да |
| enabled | boolean | Включение уведомлений об ошибках | Да |
| included_trace_package | string | Путь к пакету trace, который нужно включить | Да |
| url | string | URL для бизнес-сообщений и сообщений разработчиков (webhook для Feishu или других) | Да |
| code | string | Бизнес-код | Да |
| secret | string | Секретный ключ подписи для DingTalk | Нет-обязательно для DingTalk |
### 🍺Использование на уровне кода (несколько способов)
#### Способ 1:
```java
// Вставьте этот код в месте ошибки
SPrometheusUtil.insert("Тест ошибки", SPrometheusTitleEnum.OTHER);
// Вставьте этот код в месте ошибки
SPrometheusUtil.insert("Тест ошибки", SPrometheusTitleEnum.OTHER, JSONObject.toJSONString(req));
// Вставьте этот код в месте ошибки
Exp exp = new Exp();
exp.setMsg("test...уже получил событие");
exp.setUri("/admin/test1");
exp.setSendChannel(SendChannel.FEISHU);
exp.setAtAll(SConstants.YES);
exp.setReqData(JSONObject.toJSONString(req));
exp.setTitleEnum(SPrometheusTitleEnum.OTHER);
SPrometheusUtil.insert(exp);
```#### Способ 4:
```java
Exp exp = new Exp();
//...
exp.setMsg(originMsg);
// Если вы хотите сохранить исходный формат вашего сообщения без изменений
// Например, если вам нужно отправить таблицу Feishu, сообщение, написанное для документа Feishu или любой другой формат, который вы хотите сохранить, вы можете использовать этот способ
SPrometheusUtil.insertOrg(exp);
```> Описание класса Exp
```java
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Exp {
@Msg(msg = "Классификация мониторинга")
private SPrometheusTitleEnum titleEnum = SPrometheusTitleEnum.OTHER;
@Msg(msg = "Адрес интерфейса")
private String uri;
@Msg(msg = "Сообщение об ошибке")
private String msg = SConstants.DEFAULT_MSG;
@Msg(msg = "Параметры запроса")
private String reqData;
@Msg(msg = "Уведомление всем @all")
private Integer atAll = SConstants.NO;
@Msg(msg = "Медиа для отправки 1:Feishu (по умолчанию) 2:DingTalk 3:Email")
private String sendChannel = SendChannel.FEISHU;
}
throw new SPrometheusException(SPrometheusTitleEnum.OTHER, "Пользовательская информация отсутствует");
@SPrometheus(title = SPrometheusTitleEnum.OTHER, uri = "admin/test1", scene = Scene.BUSINESS)
public void test(String id) {
if (StrUtil.isBlank(id)) {
System.out.println("Основной ключ ID отсутствует");
throw new NullPointerException("Основной ключ ID отсутствует");
}
}
Например: исключения валидации параметров, предопределенные исключения в бизнес-процессах и т.д.
Эти исключения не являются критическими, некоторые из них требуют внимания со стороны сотрудников бизнеса, но в большинстве случаев сотрудники бизнеса не должны их учитывать, а разработчики и подавно.
Поэтому такие исключения требуют контроля частоты уведомлений и их охвата, чтобы избежать излишнего количества сообщений в группе, что может привести к пропуску важных уведомлений.#### Непредсказуемые исключения
Неизвестные разработчикам исключения не требуют предварительного определения и позиционирования, например: исключение NullPointerException
, ошибка преобразования типов, исключение выполнения SQL, таймаут и т.д. Если такие исключения возникают, они требуют немедленной обработки, их уровень критичности является самым высоким P0 уровнем, и такие исключения будут отправлены непосредственно в группу разработчиков.
Когда в системе возникает бизнес-исключение, то появляется следующее уведомление
Создание тестового исключения
@PostMapping("/test/test")
@Operation(summary = "APP[Система управления рисками обратная связь инициирования платежа]")
public void prepayment(@Valid @RequestBody LoanOrderQueryVO vo) {
if (1 == 1) {
throw new PrometheusException("NullPointerException");
}
}
Получение уведомления в Feishu```textmate Имя сервиса: gosling-server Адрес запроса: /app-api/test/test Описание интерфейса: иное|системное исключение Информация об исключении: отсутствует параметр запроса: id Трассировка исключения: com.gosling.framework.web.core.handler.GlobalExceptionHandler.missingServletRequestParameterExceptionHandler(GlobalExceptionHandler.java:110) Код ошибки: 100000 Локализация исключения: com.gosling.framework.web.core.handler.GlobalExceptionHandler.missingServletRequestParameterExceptionHandler(GlobalExceptionHandler.java:110) ID цепи: 94bb8b920be3401e9e0474224c30939e Время возникновения исключения: 2024-09-06 11:05:15 Время выполнения интерфейса: 1.0091 сек IP запроса: 192.168.1.1 active: test Параметры запроса: {"id":""}
Если вы хотите получить более полное уведомление, вы можете выбрать
При глобальном перехвате исключений, аналогично отсутствию параметров запроса или некорректному методу запроса, исключения не попадают в аспектный мониторинг, поэтому требуется ручное настройка мониторинга ошибок (в будущем это будет автоматизировано)
```java
@ExceptionHandler(value = MissingServletRequestParameterException.class)
public BaseResult<?> missingServletRequestParameterExceptionHandler(HttpServletRequest request, MissingServletRequestParameterException ex) {
log.error("Обработка глобальных ошибок: ошибка передачи параметров", ex);
String message = String.format("Отсутствие параметров запроса: %s", ex.getParameterName());
Exp exp = new Exp();
exp.setUri(request.getRequestURI());
exp.setMsg(message);
exp.setReqData(getParams(request));
exp.setTitleEnum(PrometheusTitleEnum.OTHER);
PrometheusUtil.insert(repayReq);
return BaseResult.error(message);
}
```### 🍐Структура фреймворка

### 📖Планируемые задачи (TODO pmo)
- Улучшение уведомлений по электронной почте
- Улучшение уведомлений в DingTalk (завершено)
- Улучшение уведомлений в QQ
- Улучшение уведомлений в WeChat
- Улучшение мониторинга NACOS
- Улучшение уведомлений для конкретных пользователей
### ⭐Star simple-prometheus⭐
### ⚠Предоставление обратной связи по ошибкам или предложениям
1. Отправка issues на gitee
2. Сканируйте QR-код ниже, чтобы подписаться на официальный аккаунт, отправьте сообщение, и я немедленно отвечу

Спасибо за вашу ценный звездочку O(∩_∩)O~~
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )