Home | 简体中文 | 繁体中文 | 杂文 | Github | 知乎专栏 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏

6.5. 日志报警

6.5.1. Logstash 配置

将 ERROR 和 WARN 级别的日志发送到钉钉群

			 
[root@netkiller ~]# cat /etc/logstash/conf.d/file.conf 
input {
	tcp {
	port => 4567 
	codec => json_lines
	}
	gelf {
	port => 12201
	use_udp => true
	#use_tcp => true
	}
}

filter {
	ruby {
		code => "event.set('datetime', event.get('@timestamp').time.localtime.strftime('%Y-%m-%d %H:%M:%S'))"
	}
}

output {

	file {
		path => "/opt/log/%{marker}.%{+yyyy}-%{+MM}-%{+dd}.log"
		codec => line { format => "[%{datetime}] %{level} %{message}"}
	}
	
	file {
		path => "/opt/log/origin.%{+yyyy}-%{+MM}-%{+dd}.log.gz"
		codec => json_lines
		gzip => true
	}
	if "ERROR" in [level] or "WARN" in [level] {
		http {
			url => "https://oapi.dingtalk.com/robot/send?access_token=56c27cb734a56cf549f6977ecc2761c4a16473db02d9d2881d008f9a239ba3e0"
			http_method => "post"
			content_type => "application/json; charset=utf-8"
			format => "message"
			message => '{"msgtype":"text","text":{"content":"Monitor: %{host}  - %{message}"}}'
		}
	}
}			
			
			

6.5.2. 监控 SpringBootApplication 的启动和退出

			 
neo@MacBook-Pro-M2 ~ % cat workspace/bottleneck/src/main/java/cn/netkiller/Application.java 
package cn.netkiller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MarkerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;

@EnableDiscoveryClient
@SpringBootApplication
public class Application {
	private static final Logger logger = LoggerFactory.getLogger(Application.class);

	@PostConstruct
	public void init() {
		System.out.printf("==================== init ====================");
		logger.warn(MarkerFactory.getMarker("finance"), "XXX 系统启动");
	}

	@PreDestroy
	public void destroy() {
		System.out.printf("==================== destroy ====================");
		logger.error(MarkerFactory.getMarker("finance"), "XXX 系统销毁");
	}

	public static void main(String[] args) {
		System.out.println("Netkiller bottleneck tool!");
		SpringApplication.run(Application.class, args);
	}
}
			
			
			

@PostConstruct 可以监控 启动情况

@PreDestroy 可以监控 退出情况