19 Commits

Author SHA1 Message Date
shizhendong
58a61ff40c fix: 解决不能还原 telegraf.d 中新增配置文件问题 2024-03-01 17:34:06 +08:00
zhangshuai
7d7f350e4d fix: oshi 网卡返回值包括本地接口 2024-02-22 18:02:09 +08:00
zhangshuai
fc3a2b4591 fix: ci 记录文件 MD5 2023-11-10 16:21:38 +08:00
zhangshuai
0d9e0d5be4 fix: ci 记录文件 MD5 2023-11-10 16:16:44 +08:00
shizhendong
4bd4109faa fix: NEZ-3218 动态加载 nz-talon systemd EnvironmentFile 文件 2023-10-11 18:20:15 +08:00
shizhendong
77439ea58a pref: NEZ-3215 nz-talon jdk&springboot 版本升级 2023-10-11 09:25:45 +08:00
shizhendong
ed091f73ac Merge remote-tracking branch 'origin/dev-3.7' into dev-3.8 2023-09-25 14:12:59 +08:00
shizhendong
6edf086b06 build: 更新 promtail 版本为 2.9.0 2023-09-11 17:02:29 +08:00
shizhendong
665daa1107 feat: NEZ-3158 nz-talon 内置组件增加 rsyslog&logrotate 配置 2023-09-04 15:45:02 +08:00
shizhendong
bff7a87e51 perf: logback.xml 开启定期扫描配置 scanPeriod="60 seconds" 2023-07-25 17:52:38 +08:00
方顺健
c6efffee85 perf: 取消spring.log 日志文件打印,取消console日志文件输出 2023-07-17 01:46:56 +00:00
shizhendong
8e7b0c7940 fix: NEZ-2138 rpm 升级脚本中替换 application-prod.yml 配置文件中 promtail 服务名称
1. 修复使用 rpm 升级安装包时,会自动还原配置文件,导致 application-prod.yml 中依然是 promtail,没有更名为 nz-promtail 问题
2023-04-27 10:10:28 +08:00
shizhendong
b6b925644f fix: promtail.service 名称改为 nz-promtail.service 2023-04-27 09:40:11 +08:00
shizhendong
d07d63fa64 fix: NEZ-2138 修复 rpm 更新缺少 nz-telegraf.service 问题 2023-04-26 18:13:36 +08:00
shizhendong
5f7d1942ed style: NEZ-2138 rpm 版本升级日志调整 2023-04-26 17:39:53 +08:00
shizhendong
a81ebe861f fix: NEZ-2138 修复 shell function 位置不当问题 2023-04-26 16:49:24 +08:00
shizhendong
c011b6b548 fix: NEZ-2138 修复 mc cp 命令使用不当问题 2023-04-26 15:21:35 +08:00
shizhendong
d47d736df9 feat: 新增 maven 私服配置 nexus repositories.releases&geedge 2023-04-26 15:15:22 +08:00
shizhendong
55e9084a46 feat: NEZ-2138 nz-talon 打包 telegraf 开源组件
1、nz-talon 编译打包时,打包 telegraf-1.26.2 (当前最新版本)
2、内置 cpu,mem,disk ,io 等默认监控配置
3、telegraf service 名称: nz-telegraf
4、promtail service 名称改为: nz-promtail
5、nz-talon 更新时确保原有 telegraf 配置不丢失
2023-04-26 15:08:13 +08:00
28 changed files with 508 additions and 126 deletions

View File

@@ -1,5 +1,5 @@
# docker镜像
image: git.mesalab.cn:7443/nezha/nz-build-env:1.3
image: git.mesalab.cn:7443/nezha/nz-build-env:1.5
# 定义全局变量
variables:
MINIO_HOST: 'http://192.168.40.48:2020/'
@@ -64,9 +64,11 @@ dev_build:
- chmod +x xjar
- "git log -100 --pretty=format:'%ad : %s' >> git-log.html"
- tar -zcvf $FILE_NAME xjar nz-talon.xjar git-log.html
- md5sum $FILE_NAME > $CI_PROJECT_NAME-$CI_COMMIT_REF_NAME-latest.tar.gz.md5sum.txt
- mc alias set nz $MINIO_HOST $MINIO_USER $MINIO_PWD
- mc cp $FILE_NAME nz/ci-cd/nz-talon/$FILE_NAME
- mc cp $FILE_NAME nz/ci-cd/nz-talon/$CI_PROJECT_NAME-$CI_COMMIT_REF_NAME-latest.tar.gz
- mc cp $CI_PROJECT_NAME-$CI_COMMIT_REF_NAME-latest.tar.gz.md5sum.txt nz/ci-cd/nz-talon/$CI_PROJECT_NAME-$CI_COMMIT_REF_NAME-latest.tar.gz.md5sum.txt
- cd ../
artifacts:
name: "$CI_PROJECT_NAME-$CI_COMMIT_REF_NAME-$CI_COMMIT_SHORT_SHA"

36
pom.xml
View File

@@ -6,7 +6,7 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.4</version>
<version>3.1.3</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>net.geedge</groupId>
@@ -15,7 +15,7 @@
<name>nz-talon</name>
<description>nezha promtail config sync talon</description>
<properties>
<java.version>1.8</java.version>
<java.version>21</java.version>
<log4j2.version>2.17.0</log4j2.version>
</properties>
<dependencies>
@@ -27,6 +27,7 @@
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<optional>true</optional>
</dependency>
<dependency>
@@ -66,6 +67,15 @@
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<release>${java.version}</release>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
@@ -121,7 +131,17 @@
<repository>
<id>nexus</id>
<name>Team Nexus Repository</name>
<url>http://192.168.40.125:8099/content/groups/public/</url>
<url>http://192.168.40.153:8099/content/groups/public/</url>
</repository>
<repository>
<id>nexus-releases</id>
<name>Team Nexus Repository</name>
<url>http://192.168.40.153:8099/content/repositories/releases/</url>
</repository>
<repository>
<id>nexus-geedge</id>
<name>Team Nexus Repository</name>
<url>http://192.168.40.153:8099/content/repositories/geedge/</url>
</repository>
<repository>
<id>public</id>
@@ -151,6 +171,16 @@
<name>Team Nexus Repository</name>
<url>http://192.168.40.153:8099/content/groups/public/</url>
</pluginRepository>
<pluginRepository>
<id>nexus-releases</id>
<name>Team Nexus Repository</name>
<url>http://192.168.40.153:8099/content/repositories/releases/</url>
</pluginRepository>
<pluginRepository>
<id>nexus-geedge</id>
<name>Team Nexus Repository</name>
<url>http://192.168.40.153:8099/content/repositories/geedge/</url>
</pluginRepository>
<pluginRepository>
<id>public</id>
<name>aliyun nexus</name>

View File

@@ -1,21 +1,20 @@
package net.geedge.confagent.controller;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import cn.hutool.log.Log;
import net.geedge.confagent.annotation.UnCheckToken;
import net.geedge.confagent.entity.AuthEntity;
import net.geedge.confagent.util.R;
import net.geedge.confagent.util.RCode;
import net.geedge.confagent.util.Tool;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
@RestController
@RequestMapping(value={"/auth"})

View File

@@ -8,7 +8,6 @@ import net.geedge.confagent.util.ConfagentUtil;
import net.geedge.confagent.util.R;
import net.geedge.confagent.util.RCode;
import net.geedge.confagent.util.Tool;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;

View File

@@ -1,11 +1,13 @@
package net.geedge.confagent.controller;
import net.geedge.confagent.util.*;
import jakarta.servlet.http.HttpServletRequest;
import net.geedge.confagent.util.OSHIUtils;
import net.geedge.confagent.util.R;
import net.geedge.confagent.util.Tool;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.List;

View File

@@ -1,6 +1,7 @@
package net.geedge.confagent.controller;
import cn.hutool.log.Log;
import jakarta.servlet.http.HttpServletRequest;
import net.geedge.confagent.util.ConfagentUtil;
import net.geedge.confagent.util.R;
import net.geedge.confagent.util.RCode;
@@ -11,8 +12,10 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
@RestController

View File

@@ -2,16 +2,18 @@ package net.geedge.confagent.controller;
import cn.hutool.core.net.url.UrlBuilder;
import cn.hutool.core.net.url.UrlPath;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpConnection;
import cn.hutool.log.Log;
import jakarta.servlet.ServletInputStream;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import net.geedge.confagent.annotation.UnCheckToken;
import net.geedge.confagent.util.ConfagentUtil;
import net.geedge.confagent.util.R;
import net.geedge.confagent.util.RCode;
import net.geedge.confagent.util.Tool;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
@@ -24,11 +26,6 @@ import java.net.HttpURLConnection;
import java.nio.charset.Charset;
import java.util.*;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@RestController
@RequestMapping("/promtail")
public class PromtailController extends BaseController{
@@ -40,16 +37,16 @@ public class PromtailController extends BaseController{
@Value("${confagent.promtail.query.auth:true}")
private Boolean queryAuth;
@Value("${confagent.promtail.restart:systemctl restart promtail}")
@Value("${confagent.promtail.restart:systemctl restart nz-promtail}")
private String restartCmd;
@Value("${confagent.versionFile:promtail.version}")
private String versionFile;
@Value("${confagent.promtail.startCmd:systemctl start promtail.service}")
@Value("${confagent.promtail.startCmd:systemctl start nz-promtail.service}")
private String startCmd;
@Value("${confagent.promtail.stopCmd:systemctl stop promtail.service}")
@Value("${confagent.promtail.stopCmd:systemctl stop nz-promtail.service}")
private String stopCmd;
private final String[] QUERY_API_SUFFIX = {"query","query_range","series","labels","label","values"};
@@ -203,7 +200,7 @@ public class PromtailController extends BaseController{
}
public void requestProm(String host, int port, String path, HttpServletRequest request, HttpServletResponse response) {
String queryString = ReflectUtil.invoke(request, "getQueryString");
String queryString = request.getQueryString();
queryString = StrUtil.isNotBlank(queryString)?queryString:"";
String url = UrlBuilder.create().setScheme("http").setHost(host).setPort(port).setPath(UrlPath.of(path, Charset.forName("UTF-8"))).toURL().toString() + "?" + queryString;
@@ -224,7 +221,7 @@ public class PromtailController extends BaseController{
while (headerNames.hasMoreElements()) {
String hn = headerNames.nextElement();
if(!"authorization".equalsIgnoreCase(hn)) {
ReflectUtil.invoke(conn,"addRequestProperty",hn,request.getHeader(hn));
conn.addRequestProperty(hn, request.getHeader(hn));
}
}
@@ -245,10 +242,12 @@ public class PromtailController extends BaseController{
String key = en.getKey();
if (Tool.StrUtil.isEmpty(key) || "Transfer-Encoding".equals(key)) continue;
List<String> value = en.getValue();
ReflectUtil.invoke(response,"addHeader",key,Tool.StrUtil.join("; ",value));
response.addHeader(key, Tool.StrUtil.join("; ", value));
}
response.setStatus(responseCode);
if (responseCode > 400) {
response.sendError(responseCode, responseMessage);
}
ReflectUtil.invoke(response, "setStatus", responseCode, responseMessage);
Tool.IoUtil.copy(connInputStream, resOutputStream);
resOutputStream.flush();//flush 输出流
} catch (Exception e) {

View File

@@ -1,22 +1,20 @@
package net.geedge.confagent.interceptor;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import cn.hutool.log.Log;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import net.geedge.confagent.annotation.UnCheckToken;
import net.geedge.confagent.util.ConfagentUtil;
import net.geedge.confagent.util.R;
import net.geedge.confagent.util.RCode;
import net.geedge.confagent.util.Tool;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import java.io.IOException;
import java.io.PrintWriter;
@Component
public class TokenInterceptor implements HandlerInterceptor {

View File

@@ -1,5 +1,12 @@
package net.geedge.confagent.util;
import cn.hutool.core.io.IORuntimeException;
import cn.hutool.log.Log;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
@@ -8,15 +15,6 @@ import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import cn.hutool.core.io.IORuntimeException;
import cn.hutool.log.Log;
@Configuration
@Order(value = 1)
public class ConfagentUtil {

View File

@@ -3,7 +3,10 @@ package net.geedge.confagent.util;
import cn.hutool.log.Log;
import oshi.SystemInfo;
import oshi.hardware.*;
import oshi.software.os.*;
import oshi.software.os.InternetProtocolStats;
import oshi.software.os.NetworkParams;
import oshi.software.os.OSProcess;
import oshi.software.os.OperatingSystem;
import java.net.InetAddress;
import java.net.UnknownHostException;
@@ -97,7 +100,7 @@ public class OSHIUtils {
}
List<HashMap<Object, Object>> network = Tool.ListUtil.list(false);
List<NetworkIF> networkIFs = hal.getNetworkIFs();
List<NetworkIF> networkIFs = hal.getNetworkIFs(true);
for (NetworkIF networkIF : networkIFs) {
HashMap<Object, Object> networkData = Tool.MapUtil.newHashMap();
networkData.put("index", networkIF.getIndex());

View File

@@ -1,17 +1,17 @@
package net.geedge.confagent.util;
import cn.hutool.log.Log;
import net.geedge.confagent.ConfagentApplication;
import java.awt.Graphics;
import java.awt.Robot;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import java.awt.*;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.lang.ref.PhantomReference;
import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
import java.lang.ref.*;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.net.URLDecoder;
@@ -26,13 +26,6 @@ import java.util.Collection;
import java.util.Iterator;
import java.util.Spliterator;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
public class Tool {
/**

View File

@@ -3,8 +3,8 @@ confagent:
cmdLine: /opt/nezha/promtail/config.conf
config: /opt/nezha/promtail/promtail.yaml
defaultIP: 127.0.0.1
startCmd: systemctl start promtail
stopCmd: systemctl stop promtail
startCmd: systemctl start nz-promtail
stopCmd: systemctl stop nz-promtail
logging:
config: config/logback-spring.xml

View File

@@ -1,12 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml" />
<configuration scan="true" scanPeriod="60 seconds">
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<logger name="org.springframework.web" level="info" />
<logger name="org.springboot.sample" level="info" />
<logger name="org.apache" level="info" />
<logger name="org.apache" level="warn" />
<logger name="org.springframework" level="info" />
<logger name="druid.sql" level="info" />
<logger name="com.springboot" level="debug" />
<property name="log.path" value="./logs/" />
<!-- 输出格式 -->
@@ -65,4 +63,4 @@
<appender-ref ref="ERROR_FILE" />
</root>
</configuration>
</configuration>

View File

@@ -2,6 +2,91 @@
WORK_DIR=/opt/nezha/nz-talon
service_exists(){
local n=$1
if [[ $(systemctl list-units --all -t service --full --no-legend "$n.service" | sed 's/^\s*//g' | cut -f1 -d' ') == $n.service ]]; then
return 0
else
return 1
fi
}
# 初始化 rsyslog & logrotate 配置
fn_init_syslog_logrotate_config(){
# promtail
cat > /etc/rsyslog.d/promtail.conf << "EOF"
if $programname == 'promtail' then {
/var/log/nezha/promtail/promtail.log
stop
}
EOF
cat > /etc/logrotate.d/promtail << "EOF"
/var/log/nezha/promtail/*.log {
daily
missingok
maxsize 100M
rotate 7
copytruncate
compress
}
EOF
# telegraf
cat > /etc/rsyslog.d/telegraf.conf << "EOF"
if $programname == 'telegraf' then {
/var/log/nezha/telegraf/telegraf.log
stop
}
EOF
cat > /etc/logrotate.d/telegraf << "EOF"
/var/log/nezha/telegraf/*.log {
daily
missingok
maxsize 100M
rotate 7
copytruncate
compress
}
EOF
}
compareMD5(){
if [ ! -f $1 ] || [ ! -f $2 ];then
echo 1
return 1
fi
local f1MD5=`md5sum $1|awk '{print $1}'`
local f2MD5=`md5sum $2|awk '{print $1}'`
if [ ${f1MD5} = ${f2MD5} ];then
echo 0
return 0
else
echo 1
return 1
fi
}
# 还原配置文件
# $1 需要还原的文件目录 /opt/nezha/nz-talon/config /opt/nezha/nz-talon/promtail ...
# $2 备份文件目录 /tmp/nezha/nz-talon/config /tmp/nezha/nz-talon/promtail ...
restoreComponentConfig(){
if [ ! -d $1 ] || [ ! -d $2 ];then
echo "Directory does not exist"
return 1
fi
for i in $(ls $2);do
if [ 1 -eq `compareMD5 $1/$i $2/$i` ];then
echo 'return config file '$1/${i}
cp -f $2/$i $1/$i
fi
done
}
# Find Java
if [[ -x "$WORK_DIR/jdk/bin/java" ]]; then
JAVA_EXE="$WORK_DIR/jdk/bin/java"
@@ -25,14 +110,15 @@ Description=nz-talon
After=network.target
[Service]
WorkingDirectory=/opt/nezha/nz-talon
ExecStart=/opt/nezha/nz-talon/xjar ${JAVA_EXE} -Dnz-agent.dir=/opt/nezha/nz-talon -jar /opt/nezha/nz-talon/nz-talon.xjar
EnvironmentFile=-/opt/nezha/nz-talon/config/config.conf
ExecStart=/opt/nezha/nz-talon/xjar ${JAVA_EXE} --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/jdk.internal.loader=ALL-UNNAMED -Dnz-agent.dir=/opt/nezha/nz-talon -jar /opt/nezha/nz-talon/nz-talon.xjar
RestartSec=5s
Restart=always
[Install]
WantedBy=multi-user.target
EOF
cat > /usr/lib/systemd/system/promtail.service <<"EOF"
cat > /usr/lib/systemd/system/nz-promtail.service <<"EOF"
[Unit]
Description=nz-talon
After=network.target
@@ -46,52 +132,122 @@ Restart=always
WantedBy=multi-user.target
EOF
cat > /usr/lib/systemd/system/nz-telegraf.service <<"EOF"
[Unit]
Description=Telegraf
Documentation=https://github.com/influxdata/telegraf
After=network-online.target
Wants=network-online.target
[Service]
WorkingDirectory=/opt/nezha/telegraf
Type=notify
EnvironmentFile=/opt/nezha/telegraf/config.conf
ExecStart=/opt/nezha/telegraf/telegraf $OPTION
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartForceExitStatus=SIGPIPE
KillMode=control-group
LimitMEMLOCK=8M:8M
[Install]
WantedBy=multi-user.target
EOF
fn_init_syslog_logrotate_config
systemctl daemon-reload
systemctl enable nz-talon && systemctl restart nz-talon
systemctl enable promtail && systemctl restart promtail
systemctl enable nz-promtail && systemctl restart nz-promtail
systemctl enable nz-telegraf && systemctl restart nz-telegraf
systemctl enable crond && systemctl restart crond
systemctl enable rsyslog && systemctl restart rsyslog
echo 'install nz-talon success !'
fi
compareMD5()
{
if [ ! -f $1 ] || [ ! -f $2 ];then
echo 1
return 1
fi
local f1MD5=`md5sum $1|awk '{print $1}'`
local f2MD5=`md5sum $2|awk '{print $1}'`
if [ ${f1MD5} = ${f2MD5} ];then
echo 0
return 0
else
echo 1
return 1
fi
}
# update
if [ 2 -eq $1 ];then
TALON_PATH=/opt/nezha/nz-talon
TMP_PATH=/tmp/nezha/nz-talon
PROMTAIL_PATH=/opt/nezha/promtail
TELEGRAF_PATH=/opt/nezha/telegraf
echo 'move backup config file...'
if [ -d $TMP_PATH ];then
# 恢复 nz-talon 配置文件
for i in $(ls $TALON_PATH/config);do
if [ 1 -eq `compareMD5 $WEB_PATH/config/$i $TMP_PATH/config/$i` ];then
echo 'return config file '${i}
cp -f $TMP_PATH/config/$i $TALON_PATH/config/$i
fi
done
# 恢复 promtail 配置文件
for n in $(ls $TMP_PATH/promtail);do
if [ -f "$PROMTAIL_PATH/$n" ];then
echo 'return config file '${n}
cp -f $TMP_PATH/promtail/$n $PROMTAIL_PATH/$n
fi
done
# nz-talon config
restoreComponentConfig $TALON_PATH/config $TMP_PATH/config
# promtail.service 名称改为 nz-promtail.service
# 这里重新替换下 application-prod.yml 中的 systemctl start|stop promtail 命令
sed -i 's/systemctl start promtail/systemctl start nz-promtail/g' $TALON_PATH/config/application-prod.yml
sed -i 's/systemctl stop promtail/systemctl stop nz-promtail/g' $TALON_PATH/config/application-prod.yml
# promtail config
restoreComponentConfig $PROMTAIL_PATH $TMP_PATH/promtail
# telegraf config
if [ -d $TELEGRAF_PATH ];then
restoreComponentConfig $TELEGRAF_PATH $TMP_PATH/telegraf
restoreComponentConfig $TELEGRAF_PATH/telegraf.d $TMP_PATH/telegraf/telegraf.d
fi
fi
fn_init_syslog_logrotate_config
systemctl daemon-reload
systemctl restart nz-talon
systemctl restart promtail
systemctl enable crond && systemctl restart crond
systemctl enable rsyslog && systemctl restart rsyslog
# nz-promtail.service
if service_exists nz-promtail; then
systemctl restart nz-promtail
else
cat > /usr/lib/systemd/system/nz-promtail.service <<"EOF"
[Unit]
Description=nz-talon
After=network.target
[Service]
WorkingDirectory=/opt/nezha/promtail
EnvironmentFile=/opt/nezha/promtail/config.conf
ExecStart=/opt/nezha/promtail/promtail $OPTION
RestartSec=5s
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable nz-promtail && systemctl restart nz-promtail
fi
# nz-telegraf.service
if service_exists nz-telegraf; then
systemctl restart nz-telegraf
else
cat > /usr/lib/systemd/system/nz-telegraf.service <<"EOF"
[Unit]
Description=Telegraf
Documentation=https://github.com/influxdata/telegraf
After=network-online.target
Wants=network-online.target
[Service]
WorkingDirectory=/opt/nezha/telegraf
Type=notify
EnvironmentFile=/opt/nezha/telegraf/config.conf
ExecStart=/opt/nezha/telegraf/telegraf $OPTION
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartForceExitStatus=SIGPIPE
KillMode=control-group
LimitMEMLOCK=8M:8M
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable nz-telegraf && systemctl restart nz-telegraf
fi
fi

View File

@@ -1,20 +1,49 @@
#!/bin/sh
service_exists(){
local n=$1
if [[ $(systemctl list-units --all -t service --full --no-legend "$n.service" | sed 's/^\s*//g' | cut -f1 -d' ') == $n.service ]]; then
return 0
else
return 1
fi
}
if [ 0 -eq $1 ];then
echo 'start remove nz-talon module from disk...'
systemctl stop nz-talon.service
systemctl stop promtail.service
systemctl stop nz-telegraf.service
rm -rf /opt/nezha/nz-talon
rm -rf /opt/nezha/promtail
rm -rf /opt/nezha/telegraf
systemctl disable nz-talon.service
systemctl disable promtail.service
systemctl disable nz-telegraf.service
rm -rf /usr/lib/systemd/system/{nz-talon.service,promtail.service}
# promtail.service
if service_exists promtail; then
systemctl stop promtail.service
rm -rf /opt/nezha/promtail
systemctl disable promtail.service
fi
# nz-promtail.service
if service_exists nz-promtail; then
systemctl stop nz-promtail.service
rm -rf /opt/nezha/promtail
systemctl disable nz-promtail.service
fi
rm -rf /usr/lib/systemd/system/{nz-talon.service,promtail.service,nz-promtail.service,nz-telegraf.service}
rm -rf /etc/rsyslog.d/{promtail.conf,telegraf.conf}
rm -rf /etc/logrotate.d/{promtail,telegraf}
systemctl daemon-reload
systemctl restart rsyslog
echo 'uninstall success!'
fi

View File

@@ -2,6 +2,18 @@
TALON_PATH=/opt/nezha/nz-talon
PROMTAIL_PATH=/opt/nezha/promtail
TELEGRAF_PATH=/opt/nezha/telegraf
service_exists(){
local n=$1
if [[ $(systemctl list-units --all -t service --full --no-legend "$n.service" | sed 's/^\s*//g' | cut -f1 -d' ') == $n.service ]]; then
return 0
else
return 1
fi
}
if [ 2 -eq $1 ];then
@@ -10,23 +22,47 @@ if [ 2 -eq $1 ];then
fi
systemctl stop nz-talon
systemctl stop promtail
# nz-telegraf.service
if service_exists nz-telegraf; then
systemctl stop nz-telegraf
fi
# promtail.service, deprecated
if service_exists promtail; then
systemctl stop promtail
systemctl disable promtail
rm /usr/lib/systemd/system/promtail.service
systemctl daemon-reload
systemctl reset-failed
fi
# nz-promtail.service
if service_exists nz-promtail; then
systemctl stop nz-promtail
fi
TMP_PATH=/tmp/nezha/nz-talon
rm -rf $TMP_PATH
mkdir -p $TMP_PATH
mkdir -p $TMP_PATH/promtail
mkdir -p $TMP_PATH/telegraf
cp -rf $TALON_PATH/config $TMP_PATH
[ -f "$PROMTAIL_PATH/promtail.yaml" ] && cp -rf $PROMTAIL_PATH/promtail.yaml $TMP_PATH/promtail
[ -f "$PROMTAIL_PATH/config.conf" ] && cp -rf $PROMTAIL_PATH/config.conf $TMP_PATH/promtail
[ -f "$TELEGRAF_PATH/config.conf" ] && cp -rf $TELEGRAF_PATH/config.conf $TMP_PATH/telegraf
[ -f "$TELEGRAF_PATH/telegraf.conf" ] && cp -rf $TELEGRAF_PATH/telegraf.conf $TMP_PATH/telegraf
[ -d "$TELEGRAF_PATH/telegraf.d" ] && cp -rf $TELEGRAF_PATH/telegraf.d $TMP_PATH/telegraf
echo 'backup config file from '${TALON_PATH}
if [ 0 -lt $(rpm -aq nz-talon|wc -w) ];then
echo 'clean before install...'
rm -rf $TALON_PATH
rm -rf $PROMTAIL_PATH
rm -rf $TELEGRAF_PATH
fi
fi

View File

@@ -12,7 +12,7 @@ fi
RPM_FULL_NAME=${PACKAGE_NAME}-${PACKAGE_VERSION}-${ITERATION}.x86_64.rpm
# 依赖jdk 文件名
JDK_FILENAME=jdk-8u202-linux-x64.tar.gz
JDK_FILENAME=openjdk-21_linux-x64_bin.tar.gz
# 初始化 minio
mc alias set nz $MINIO_HOST $MINIO_USER $MINIO_PWD
@@ -21,9 +21,10 @@ mc alias set nz $MINIO_HOST $MINIO_USER $MINIO_PWD
BUILD_PATH=$CUR_PWD/build
RPM_TALON_PATH=$BUILD_PATH/opt/nezha/nz-talon
RPM_PROMTAIL_PATH=$BUILD_PATH/opt/nezha/promtail
RPM_TELEGRAF_PATH=$BUILD_PATH/opt/nezha/telegraf
RPM_JDK_PATH=$RPM_TALON_PATH/jdk
mkdir -p $RPM_TALON_PATH $RPM_PROMTAIL_PATH
mkdir -p $RPM_TALON_PATH $RPM_PROMTAIL_PATH $RPM_TELEGRAF_PATH
mkdir -p $RPM_TALON_PATH/config
mkdir -p $RPM_JDK_PATH
@@ -50,12 +51,20 @@ mc cp nz/depends/jdk/$JDK_FILENAME ./
tar -xzf ./$JDK_FILENAME --strip-components 1 -C $RPM_JDK_PATH
# 下载 promtail
mc cp nz/depends/loki/promtail-linux-amd64.zip ./
unzip -o promtail-linux-amd64.zip -d $RPM_PROMTAIL_PATH
mc cp nz/depends/loki/promtail-2.9.0.linux-amd64.zip ./
unzip -o promtail-2.9.0.linux-amd64.zip -d $RPM_PROMTAIL_PATH
mv $RPM_PROMTAIL_PATH/promtail-linux-amd64 $RPM_PROMTAIL_PATH/promtail
cp -f ./tools/config.conf $RPM_PROMTAIL_PATH
cp -f ./tools/promtail.yaml $RPM_PROMTAIL_PATH
# telegraf
mc cp nz/depends/telegraf/telegraf-1.26.2.tar.gz ./
tar -xzf telegraf-1.26.2.tar.gz -C $RPM_TELEGRAF_PATH
cat > $RPM_TELEGRAF_PATH/config.conf <<EOF
OPTION=" -config /opt/nezha/telegraf/telegraf.conf -config-directory /opt/nezha/telegraf/telegraf.d "
EOF
cp -f ./tools/telegraf.conf $RPM_TELEGRAF_PATH
cp -rf ./tools/telegraf.d $RPM_TELEGRAF_PATH
#修改日志地址 2021_08_26
sed -i 's/<property name="log.path" value=".*"/<property name="log.path" value="\/var\/log\/nezha\/nz-talon\/"/g' ${RPM_TALON_PATH}/config/logback-spring.xml

24
tools/telegraf.conf Normal file
View File

@@ -0,0 +1,24 @@
# Configuration for the Prometheus client to spawn
[[outputs.prometheus_client]]
## Address to listen on.
listen = ":19273"
namepass = ["cpu", "disk", "diskio", "mem", "net", "processes", "swap", "system", "systemd_units", "kernel"]
## Metric version controls the mapping from Prometheus metrics into Telegraf metrics.
## See "Metric Format Configuration" in plugins/inputs/prometheus/README.md for details.
## Valid options: 1, 2
# metric_version = 1 ## Use HTTP Basic Authentication.
# basic_username = "Foo"
# basic_password = "Bar" ## If set, the IP Ranges which are allowed to access metrics.
## ex: ip_range = ["192.168.0.0/24", "192.168.1.0/30"]
# ip_range = [] ## Path to publish the metrics on.
# path = "/metrics" ## Expiration interval for each metric. 0 == no expiration
# expiration_interval = "60s" ## Collectors to enable, valid entries are "gocollector" and "process".
## If unset, both are enabled.
# collectors_exclude = ["gocollector", "process"] ## Send string metrics as Prometheus labels.
## Unless set to false all string metrics will be sent as labels.
# string_as_label = true ## If set, enable TLS with the given certificate.
# tls_cert = "/etc/ssl/telegraf.crt"
# tls_key = "/etc/ssl/telegraf.key" ## Set one or more allowed client CA certificate file names to
## enable mutually authenticated TLS connections
# tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"] ## Export metric collection time.
# export_timestamp = false

12
tools/telegraf.d/cpu.conf Normal file
View File

@@ -0,0 +1,12 @@
# Read metrics about cpu usage
[[inputs.cpu]]
## Whether to report per-cpu stats or not
percpu = true
## Whether to report total system cpu stats or not
totalcpu = true
## If true, collect raw CPU time metrics
collect_cpu_time = false
## If true, compute and report the sum of all non-idle CPU states
report_active = false
## If true and the info is available then add core_id and physical_id tags
core_tags = false

View File

@@ -0,0 +1,13 @@
# Read metrics about disk usage by mount point
[[inputs.disk]]
## By default stats will be gathered for all mount points.
## Set mount_points will restrict the stats to only the specified mount points.
# mount_points = ["/"]
## Ignore mount points by filesystem type.
ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]
## Ignore mount points by mount options.
## The 'mount' command reports options of all mounts in parathesis.
## Bind mounts can be ignored with the special 'bind' option.
# ignore_mount_opts = []

View File

@@ -0,0 +1,30 @@
# Read metrics about disk IO by device
# This plugin ONLY supports Linux
[[inputs.diskio]]
## By default, telegraf will gather stats for all devices including
## disk partitions.
## Setting devices will restrict the stats to the specified devices.
## NOTE: Globbing expressions (e.g. asterix) are not supported for
## disk synonyms like '/dev/disk/by-id'.
# devices = ["sda", "sdb", "vd*", "/dev/disk/by-id/nvme-eui.00123deadc0de123"]
## Uncomment the following line if you need disk serial numbers.
# skip_serial_number = false
#
## On systems which support it, device metadata can be added in the form of
## tags.
## Currently only Linux is supported via udev properties. You can view
## available properties for a device by running:
## 'udevadm info -q property -n /dev/sda'
## Note: Most, but not all, udev properties can be accessed this way. Properties
## that are currently inaccessible include DEVTYPE, DEVNAME, and DEVPATH.
# device_tags = ["ID_FS_TYPE", "ID_FS_USAGE"]
#
## Using the same metadata source as device_tags, you can also customize the
## name of the device via templates.
## The 'name_templates' parameter is a list of templates to try and apply to
## the device. The template may contain variables in the form of '$PROPERTY' or
## '${PROPERTY}'. The first template which does not contain any variables not
## present for the device is used as the device name tag.
## The typical use case is for LVM volumes, to get the VG/LV name instead of
## the near-meaningless DM-0 name.
# name_templates = ["$ID_FS_LABEL","$DM_VG_NAME/$DM_LV_NAME"]

View File

@@ -0,0 +1,4 @@
# Get kernel statistics from /proc/stat
# This plugin ONLY supports Linux
[[inputs.kernel]]
# no configuration

View File

@@ -0,0 +1,3 @@
# Read metrics about memory usage
[[inputs.mem]]
# no configuration

14
tools/telegraf.d/net.conf Normal file
View File

@@ -0,0 +1,14 @@
# Gather metrics about network interfaces
[[inputs.net]]
## By default, telegraf gathers stats from any up interface (excluding loopback)
## Setting interfaces will tell it to gather these explicit interfaces,
## regardless of status. When specifying an interface, glob-style
## patterns are also supported.
##
# interfaces = ["eth*", "enp0s[0-1]", "lo"]
##
## On linux systems telegraf also collects protocol stats.
## Setting ignore_protocol_stats to true will skip reporting of protocol metrics.
##
# ignore_protocol_stats = false
##

View File

@@ -0,0 +1,6 @@
# Get the number of processes and group them by status
# This plugin ONLY supports non-Windows
[[inputs.processes]]
## Use sudo to run ps command on *BSD systems. Linux systems will read
## /proc, so this does not apply there.
use_sudo = false

View File

@@ -0,0 +1,3 @@
# Read metrics about swap memory usage
[[inputs.swap]]
# no configuration

View File

@@ -0,0 +1,3 @@
# Read metrics about system load & uptime
[[inputs.system]]
# no configuration

View File

@@ -0,0 +1,16 @@
# Gather systemd units state
[[inputs.systemd_units]]
## Set timeout for systemctl execution
# timeout = "1s"
#
## Filter for a specific unit type, default is "service", other possible
## values are "socket", "target", "device", "mount", "automount", "swap",
## "timer", "path", "slice" and "scope ":
# unittype = "service"
#
## Filter for a specific pattern, default is "" (i.e. all), other possible
## values are valid pattern for systemctl, e.g. "a*" for all units with
## names starting with "a"
# pattern = ""
## pattern = "telegraf* influxdb*"
## pattern = "a*"