Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
E
enoch
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DevOps
enoch
Commits
b01d8b63
Commit
b01d8b63
authored
Nov 21, 2019
by
jingbo.wang
Browse files
Options
Browse Files
Download
Plain Diff
合并 node-check
parents
57e92151
4ad1aab0
Changes
21
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
118 additions
and
204 deletions
+118
-204
go.mod
go.mod
+9
-22
main.go
main.go
+23
-12
load.go
service/alarm/load.go
+4
-4
notice_engine.go
service/alarm/notice_engine.go
+5
-5
operator.go
service/alarm/operator.go
+5
-6
query_engine.go
service/alarm/query_engine.go
+4
-4
load_conf.go
service/conf/load_conf.go
+2
-2
brave_message_handler.go
service/consumer/brave_message_handler.go
+5
-7
health_message_handler.go
service/consumer/health_message_handler.go
+5
-5
kafka_agent_sarama.go
service/consumer/kafka_agent_sarama.go
+4
-4
util.go
service/consumer/util.go
+8
-8
apdex_continuous_query.go
service/continuous_queries/apdex_continuous_query.go
+6
-6
influxdb_conf.go
service/data/influxdb_conf.go
+4
-4
ding.go
service/dingding/ding.go
+0
-42
ding_test.go
service/dingding/ding_test.go
+0
-15
file_cache.go
service/file_cache/file_cache.go
+12
-12
switcher.go
service/file_cache/switcher.go
+4
-4
alarm.go
service/job/alarm.go
+3
-3
conf.go
service/log/conf.go
+0
-25
node_check.go
service/node-check/node_check.go
+14
-13
consul.go
service/registry/consul.go
+1
-1
No files found.
go.mod
View file @
b01d8b63
module git.quantgroup.cn/DevOps/enoch
go 1.12
require (
github.com/Azure/go-autorest/autorest/validation v0.2.0 // indirect
github.com/Shopify/sarama v1.21.0
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect
github.com/armon/circbuf v0.0.0-20190214190532-5111143e8da2 // indirect
github.com/Shopify/sarama v1.23.1
github.com/bsm/sarama-cluster v2.1.15+incompatible
github.com/coredns/coredns v1.6.3 // indirect
github.com/dnaeon/go-vcr v1.0.1 // indirect
github.com/envoyproxy/go-control-plane v0.8.6 // indirect
github.com/go-ole/go-ole v1.2.4 // indirect
github.com/gogo/googleapis v1.3.0 // indirect
github.com/gomodule/redigo v2.0.0+incompatible
github.com/hashicorp/consul v1.4.0
github.com/hashicorp/go-discover v0.0.0-20190905142513-34a650575f6c // indirect
github.com/hashicorp/hil v0.0.0-20190212132231-97b3a9cdfa93 // indirect
github.com/hashicorp/logutils v1.0.0 // indirect
github.com/hashicorp/net-rpc-msgpackrpc v0.0.0-20151116020338-a14192a58a69 // indirect
github.com/hashicorp/raft-boltdb v0.0.0-20190605210249-ef2e128ed477 // indirect
github.com/influxdata/influxdb v1.7.2
github.com/influxdata/platform v0.0.0-20181221041837-9d0ed9020c3f // indirect
github.com/hashicorp/consul/api v1.2.0
github.com/influxdata/influxdb v1.7.8
github.com/json-iterator/go v1.1.7
github.com/mitchellh/cli v1.0.0 // indirect
github.com/mitchellh/hashstructure v1.0.0 // indirect
github.com/robfig/cron v0.0.0-20180505203441-b41be1df6967
github.com/shirou/gopsutil v2.18.12+incompatible // indirect
github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4 // indirect
github.com/onsi/ginkgo v1.10.1 // indirect
github.com/onsi/gomega v1.7.0 // indirect
github.com/robfig/cron v1.2.0
github.com/vrg0/go-common v0.0.0-20190925101101-e6595edace1b
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
)
main.go
View file @
b01d8b63
...
...
@@ -10,37 +10,48 @@ import (
"git.quantgroup.cn/DevOps/enoch/service/file_cache"
"git.quantgroup.cn/DevOps/enoch/service/job"
"git.quantgroup.cn/DevOps/enoch/service/node-check"
"
log
"
"
github.com/vrg0/go-common/logger
"
"net/http"
_
"net/http/pprof"
"os"
"strconv"
)
func
main
()
{
var
quartz
bool
var
denv
string
var
didc
string
var
quartz
bool
var
denv
string
var
didc
string
func
init
()
{
flag
.
BoolVar
(
&
quartz
,
"quartz"
,
false
,
"quartz"
)
flag
.
StringVar
(
&
denv
,
"env"
,
"dev"
,
"环境"
)
flag
.
StringVar
(
&
didc
,
"idc"
,
"local"
,
"机房"
)
flag
.
Parse
()
logPath
:=
"./enoch.log"
if
denv
==
"pro"
{
logPath
=
"/home/quant_group/enoch/enoch.log"
}
if
e
:=
logger
.
Init
(
denv
==
"pro"
,
logPath
);
e
!=
nil
{
panic
(
e
)
}
}
func
main
()
{
conf
.
Load
(
denv
,
didc
)
file
,
err
:=
os
.
OpenFile
(
"quantgroup.log"
,
os
.
O_RDWR
|
os
.
O_CREATE
,
0666
)
defer
func
()
{
_
=
file
.
Close
()
}()
if
err
!=
nil
{
log
.
Fatalln
(
"create file error"
,
err
)
log
ger
.
Fatal
(
"create file error"
,
err
)
}
file_cache
.
Load
(
conf
.
GlobalConfig
.
FileCachePath
)
file_cache
.
RegisterJob
(
consumer
.
ReSubmit
)
go
file_cache
.
Delete
()
port
:=
conf
.
GlobalConfig
.
Port
logger
:=
log
.
New
(
file
,
"[Info]"
,
log
.
LstdFlags
|
log
.
Llongfile
)
logger
.
Println
(
conf
.
GlobalConfig
.
AppName
+
"项目启动, port:"
+
port
+
",环境:"
+
conf
.
GlobalConfig
.
Env
)
defer
logger
.
Println
(
"项目结束"
)
logger
.
Info
(
conf
.
GlobalConfig
.
AppName
+
"项目启动, port:"
+
port
+
",环境:"
+
conf
.
GlobalConfig
.
Env
)
defer
logger
.
Info
(
"项目结束"
)
//初始化redis连接池
data
.
RedisPoolInit
()
...
...
@@ -49,7 +60,7 @@ func main() {
intPort
,
_
:=
strconv
.
Atoi
(
port
)
if
quartz
{
log
.
Println
(
"启动定时任务"
)
log
ger
.
Info
(
"启动定时任务"
)
job
.
AutoEmailPerformInfo
()
}
...
...
@@ -75,7 +86,7 @@ func main() {
err
=
http
.
ListenAndServe
(
":"
+
port
,
nil
)
if
err
!=
nil
{
log
.
Fatalln
(
"服务启动失败"
,
err
)
log
ger
.
Fatal
(
"服务启动失败"
,
err
)
}
}
...
...
service/alarm/load.go
View file @
b01d8b63
...
...
@@ -4,14 +4,14 @@ import (
"encoding/json"
"git.quantgroup.cn/DevOps/enoch/service/conf"
"git.quantgroup.cn/DevOps/enoch/service/data"
"git
.quantgroup.cn/DevOps/enoch/service/log
"
"git
hub.com/vrg0/go-common/logger
"
"io/ioutil"
)
func
Load
()
{
config
,
err
:=
ioutil
.
ReadFile
(
conf
.
GlobalConfig
.
StrategyConfPath
)
if
err
!=
nil
{
logger
.
Error
.
Print
(
"!!!轮训监控,未找到配置文件!!!"
)
logger
.
Error
(
"!!!轮训监控,未找到配置文件!!!"
)
return
}
...
...
@@ -19,12 +19,12 @@ func Load() {
err
=
json
.
Unmarshal
(
config
,
&
strategies
)
if
err
!=
nil
{
logger
.
Error
.
Printf
(
"!!!策略文件格式错误:%s!!!
\n
"
,
err
)
logger
.
Error
(
"!!!策略文件格式错误:%s!!!
\n
"
,
err
)
return
}
if
!
CheckArray
(
strategies
)
{
logger
.
Error
.
Print
(
"!!!策略文件未通过校验!!!"
)
logger
.
Error
(
"!!!策略文件未通过校验!!!"
)
return
}
...
...
service/alarm/notice_engine.go
View file @
b01d8b63
...
...
@@ -2,8 +2,8 @@ package alarm
import
(
"encoding/json"
"git.quantgroup.cn/DevOps/enoch/service/log"
"git.quantgroup.cn/DevOps/enoch/service/util"
"github.com/vrg0/go-common/logger"
"net/http"
"strings"
"sync"
...
...
@@ -25,7 +25,7 @@ func Sender(target []string, title string, info string, notice Notice) {
case
MAIL
:
senderMail
(
title
,
info
,
notice
.
Receiver
)
default
:
logger
.
Error
.
Println
(
"策略配置错误,未匹配到对应的Sender"
)
logger
.
Error
(
"策略配置错误,未匹配到对应的Sender"
)
}
}
...
...
@@ -42,7 +42,7 @@ func senderDingDing(title string, info string, receiver [] string) {
data
:=
strings
.
NewReader
(
string
(
bodyStr
))
_
,
err
:=
http
.
Post
(
r
,
"application/json;charset=utf-8"
,
data
)
if
err
!=
nil
{
logger
.
Error
.
Println
(
err
)
logger
.
Error
(
err
)
}
}
}
...
...
@@ -61,7 +61,7 @@ func buildDingDingMsg(title string, info string) []byte {
msgStr
,
err
:=
json
.
Marshal
(
msg
)
if
nil
!=
err
{
logger
.
Error
.
Println
(
"无法序列化ding ding msg"
,
err
)
logger
.
Error
(
"无法序列化ding ding msg"
,
err
)
}
return
msgStr
...
...
@@ -73,7 +73,7 @@ func buildDingDingMsg(title string, info string) []byte {
func
isExpired
(
key
string
,
interval
int64
)
bool
{
now
:=
time
.
Now
()
.
Unix
()
lastTime
,
hasValue
:=
SenderWatcher
.
LoadOrStore
(
key
,
now
)
logger
.
Info
.
Println
(
"---------时间间隔:old:"
,
lastTime
,
",new:"
,
now
)
logger
.
Info
(
"---------时间间隔:old:"
,
lastTime
,
",new:"
,
now
)
if
hasValue
{
// 存在旧值,判断是否过期
if
now
-
lastTime
.
(
int64
)
>=
interval
{
//过期
SenderWatcher
.
Store
(
key
,
now
)
...
...
service/alarm/operator.go
View file @
b01d8b63
...
...
@@ -2,8 +2,7 @@ package alarm
import
(
"fmt"
"git.quantgroup.cn/DevOps/enoch/service/log"
"log"
"github.com/vrg0/go-common/logger"
"strconv"
"strings"
)
...
...
@@ -55,8 +54,8 @@ func (Compare) Equal(alter string, real []string) bool {
//限制同比
func
(
Compare
)
LimitComparedWithSame
(
alter
string
,
old
[]
string
,
current
[]
string
)
bool
{
log
.
Println
(
alter
,
old
,
current
)
logger
.
Info
.
Println
(
"old:"
,
strings
.
Join
(
old
,
","
),
"new: "
,
strings
.
Join
(
current
,
","
))
log
ger
.
Info
(
alter
,
old
,
current
)
logger
.
Info
(
"old:"
,
strings
.
Join
(
old
,
","
),
"new: "
,
strings
.
Join
(
current
,
","
))
rs
:=
true
lastIndex
:=
len
(
current
)
-
1
for
i
,
r
:=
range
current
{
...
...
@@ -71,7 +70,7 @@ func (Compare) LimitComparedWithSame(alter string, old []string, current []strin
同比超过alter
*/
func
(
Compare
)
ComparedWithSame
(
alter
string
,
old
[]
string
,
current
[]
string
)
bool
{
logger
.
Info
.
Println
(
"old:"
,
strings
.
Join
(
old
,
","
),
"new: "
,
strings
.
Join
(
current
,
","
))
logger
.
Info
(
"old:"
,
strings
.
Join
(
old
,
","
),
"new: "
,
strings
.
Join
(
current
,
","
))
rs
:=
true
lastIndex
:=
len
(
current
)
-
1
for
i
,
r
:=
range
current
{
...
...
@@ -104,7 +103,7 @@ func compareSame(alter string, old string, current string) bool {
func
parseToFloat
(
value
string
)
float64
{
rs
,
err
:=
strconv
.
ParseFloat
(
value
,
64
)
if
nil
!=
err
{
logger
.
Error
.
Println
(
err
)
logger
.
Error
(
err
)
}
return
rs
}
...
...
service/alarm/query_engine.go
View file @
b01d8b63
...
...
@@ -2,8 +2,8 @@ package alarm
import
(
"fmt"
"git.quantgroup.cn/DevOps/enoch/service/log"
"github.com/influxdata/influxdb/client/v2"
"github.com/vrg0/go-common/logger"
"reflect"
"strings"
)
...
...
@@ -14,7 +14,7 @@ var msgBuilder = reflect.ValueOf(MsgBuilder{})
func
DealResult
(
res
[]
client
.
Result
,
strategies
[]
Strategy
)
{
var
resIndex
=
0
for
_
,
strategy
:=
range
strategies
{
logger
.
Info
.
Println
(
"-------"
,
strategy
.
Name
,
resIndex
,
"---------"
)
logger
.
Info
(
"-------"
,
strategy
.
Name
,
resIndex
,
"---------"
)
operator
:=
strategy
.
Operator
operatorMethod
:=
operators
.
MethodByName
(
operator
)
buildMsgMethod
:=
msgBuilder
.
MethodByName
(
operator
)
...
...
@@ -50,7 +50,7 @@ func DealResult(res []client.Result, strategies []Strategy) {
params
[
j
]
=
reflect
.
ValueOf
(
arg
)
}
params
[
alterValueLen
]
=
reflect
.
ValueOf
(
value
)
logger
.
Info
.
Println
(
uniqueTag
,
":alter"
,
params
[
:
1
],
"-"
,
strings
.
Join
(
value
,
","
))
logger
.
Info
(
uniqueTag
,
":alter"
,
params
[
:
1
],
"-"
,
strings
.
Join
(
value
,
","
))
rs
:=
operatorMethod
.
Call
(
params
)
if
rs
[
0
]
.
Bool
()
{
//触发报警策略
//Sender(tagValues, strategy.Name, s, notice) // 报警
...
...
@@ -94,7 +94,7 @@ func DealResult(res []client.Result, strategies []Strategy) {
continue
}
logger
.
Info
.
Println
(
k
,
":"
,
v
)
logger
.
Info
(
k
,
":"
,
v
)
rs
:=
operatorMethod
.
Call
(
v
)
//结果报警
if
rs
[
0
]
.
Bool
()
{
//触发报警策略
...
...
service/conf/load_conf.go
View file @
b01d8b63
...
...
@@ -2,7 +2,7 @@ package conf
import
(
"encoding/json"
"git
.quantgroup.cn/DevOps/enoch/service/log
"
"git
hub.com/vrg0/go-common/logger
"
"io/ioutil"
"net/http"
)
...
...
@@ -17,6 +17,6 @@ func Load(denv string, didc string) {
err
=
json
.
Unmarshal
(
bytes
,
&
GlobalConfig
)
GlobalConfig
.
Env
=
denv
if
nil
!=
err
{
logger
.
Error
.
Println
(
err
)
logger
.
Error
(
err
)
}
}
service/consumer/brave_message_handler.go
View file @
b01d8b63
...
...
@@ -5,10 +5,9 @@ import (
"fmt"
"git.quantgroup.cn/DevOps/enoch/service/data"
"git.quantgroup.cn/DevOps/enoch/service/end_points"
"git.quantgroup.cn/DevOps/enoch/service/log"
"github.com/gomodule/redigo/redis"
"github.com/influxdata/influxdb/client/v2"
"
log
"
"
github.com/vrg0/go-common/logger
"
"strings"
"time"
)
...
...
@@ -25,13 +24,13 @@ func (BraveMessageHandler) MsgProcess(msg string) {
traceMsg
:=
make
([]
end_points
.
TraceMsg
,
3
)
//[]TraceMsg{}
err
:=
json
.
Unmarshal
([]
byte
(
msg
),
&
traceMsg
)
if
err
!=
nil
{
logger
.
Error
.
Println
(
"brave 解析msg失败:"
,
err
)
logger
.
Error
(
"brave 解析msg失败:"
,
err
)
}
msgInfluxProcess
(
traceMsg
)
}
func
(
BraveMessageHandler
)
Destroy
()
{
if
len
(
pointSlice
)
>
0
{
logger
.
Info
.
Println
(
"braveMessageHandler 提交本地缓存数据:"
,
len
(
pointSlice
))
logger
.
Info
(
"braveMessageHandler 提交本地缓存数据:"
,
len
(
pointSlice
))
batchWrite
(
pointSlice
)
}
}
...
...
@@ -48,7 +47,6 @@ func msgInfluxProcess(traceMsgs []end_points.TraceMsg) {
if
strings
.
ToLower
(
traceMsg
.
Tags
.
HttpMethod
)
==
"options"
{
continue
}
path
:=
traceMsg
.
Name
if
_
,
ok
:=
httpMethod
[
path
];
ok
{
path
=
traceMsg
.
Tags
.
HttpMethod
+
" "
+
traceMsg
.
Tags
.
HttpPath
...
...
@@ -73,7 +71,7 @@ func msgInfluxProcess(traceMsgs []end_points.TraceMsg) {
tags
[
"host"
]
=
traceMsg
.
LocalEndpoint
.
Ipv4
if
err
!=
nil
{
log
.
Fatal
(
err
)
log
ger
.
Fatal
(
err
)
}
unix
:=
time
.
Unix
(
0
,
traceMsg
.
Timestamp
*
1000
)
...
...
@@ -86,7 +84,7 @@ func msgInfluxProcess(traceMsgs []end_points.TraceMsg) {
pointSlice
=
append
(
pointSlice
,
point
)
if
err
!=
nil
{
log
.
Fatal
(
err
,
msg
)
log
ger
.
Fatal
(
err
,
msg
)
}
}
...
...
service/consumer/health_message_handler.go
View file @
b01d8b63
...
...
@@ -3,8 +3,8 @@ package consumer
import
(
"encoding/json"
"git.quantgroup.cn/DevOps/enoch/service/end_points"
"git.quantgroup.cn/DevOps/enoch/service/log"
"github.com/influxdata/influxdb/client/v2"
"github.com/vrg0/go-common/logger"
"math/big"
"net"
"time"
...
...
@@ -21,8 +21,8 @@ func (HealthMessageHandler) MsgProcess(msg string) {
chunkMsg
:=
end_points
.
ChunkMsg
{}
err
:=
json
.
Unmarshal
([]
byte
(
msg
),
&
chunkMsg
)
if
err
!=
nil
{
logger
.
Error
.
Println
(
"healthMessageHandler解析json失败:"
,
err
)
logger
.
Error
.
Println
(
msg
)
logger
.
Error
(
"healthMessageHandler解析json失败:"
,
err
)
logger
.
Error
(
msg
)
return
}
buildMsg
(
chunkMsg
)
...
...
@@ -30,12 +30,12 @@ func (HealthMessageHandler) MsgProcess(msg string) {
func
(
HealthMessageHandler
)
Destroy
()
{
if
len
(
metricsPointSlice
)
>
0
{
logger
.
Info
.
Println
(
"metricsMessageHandler 提交本地缓存数据:"
,
len
(
metricsPointSlice
))
logger
.
Info
(
"metricsMessageHandler 提交本地缓存数据:"
,
len
(
metricsPointSlice
))
batchWrite
(
metricsPointSlice
)
}
if
len
(
healthPointSlice
)
>
0
{
logger
.
Info
.
Println
(
"HealthMessageHandler 提交本地缓存数据:"
,
len
(
healthPointSlice
))
logger
.
Info
(
"HealthMessageHandler 提交本地缓存数据:"
,
len
(
healthPointSlice
))
batchWrite
(
healthPointSlice
)
}
}
...
...
service/consumer/kafka_agent_sarama.go
View file @
b01d8b63
...
...
@@ -2,9 +2,9 @@ package consumer
import
(
"git.quantgroup.cn/DevOps/enoch/service/conf"
"git.quantgroup.cn/DevOps/enoch/service/log"
"github.com/Shopify/sarama"
"github.com/bsm/sarama-cluster"
"github.com/vrg0/go-common/logger"
"os"
"os/signal"
"sync/atomic"
...
...
@@ -32,7 +32,7 @@ func AgentClusterConsumer(kafkaConf conf.KafkaConf, messageHandle MessageHandler
_
=
consumer
.
Close
()
messageHandle
.
Destroy
()
atomic
.
AddInt32
(
&
consumerCount
,
-
1
)
logger
.
Info
.
Println
(
"consumer结束"
)
logger
.
Info
(
"consumer结束"
)
if
consumerCount
==
0
{
os
.
Exit
(
0
)
}
...
...
@@ -41,14 +41,14 @@ func AgentClusterConsumer(kafkaConf conf.KafkaConf, messageHandle MessageHandler
// consume errors
go
func
()
{
for
err
:=
range
consumer
.
Errors
()
{
logger
.
Error
.
Println
(
"consume error:"
,
err
.
Error
())
logger
.
Error
(
"consume error:"
,
err
.
Error
())
}
}()
// consume notifications
go
func
()
{
for
ntf
:=
range
consumer
.
Notifications
()
{
logger
.
Info
.
Printf
(
"Rebalanced: %+v
\n
"
,
ntf
)
logger
.
Info
(
"Rebalanced: %+v
\n
"
,
ntf
)
}
}()
...
...
service/consumer/util.go
View file @
b01d8b63
...
...
@@ -5,13 +5,13 @@ import (
"fmt"
"git.quantgroup.cn/DevOps/enoch/service/data"
"git.quantgroup.cn/DevOps/enoch/service/file_cache"
"git.quantgroup.cn/DevOps/enoch/service/log"
"github.com/influxdata/influxdb/client/v2"
"github.com/vrg0/go-common/logger"
)
func
batchWrite
(
pointArray
[]
*
client
.
Point
)
{
if
file_cache
.
Enabled
()
{
logger
.
Info
.
Println
(
"写入缓存"
)
logger
.
Info
(
"写入缓存"
)
fileWrite
(
pointArray
)
}
else
{
err
:=
httpWrite
(
pointArray
)
...
...
@@ -19,7 +19,7 @@ func batchWrite(pointArray []*client.Point) {
file_cache
.
OpenCache
()
fileWrite
(
pointArray
)
}
logger
.
Info
.
Println
(
"写入influx"
,
len
(
pointArray
))
logger
.
Info
(
"写入influx"
,
len
(
pointArray
))
}
}
...
...
@@ -48,7 +48,7 @@ func ReSubmit(data []string) error {
cp
:=
file_cache
.
CreateCachePoint
(
v
)
point
,
err
:=
client
.
NewPoint
(
cp
.
Name
,
cp
.
Tags
,
cp
.
Fields
,
cp
.
Time
)
if
err
!=
nil
{
logger
.
Error
.
Println
(
"构造client.point异常"
,
err
)
logger
.
Error
(
"构造client.point异常"
,
err
)
}
pointSlice
=
append
(
pointSlice
,
point
)
if
len
(
pointSlice
)
>
1000
{
...
...
@@ -56,19 +56,19 @@ func ReSubmit(data []string) error {
if
err
!=
nil
{
return
err
}
logger
.
Info
.
Println
(
"缓存重新提交:1000"
)
logger
.
Info
(
"缓存重新提交:1000"
)
pointSlice
=
make
([]
*
client
.
Point
,
0
)
}
}
if
len
(
pointSlice
)
>
0
{
err
:=
httpWrite
(
pointSlice
)
if
err
!=
nil
{
logger
.
Info
.
Println
(
pointSlice
)
logger
.
Info
(
pointSlice
)
return
err
}
logger
.
Info
.
Println
(
"缓存重新提交:"
,
len
(
pointSlice
))
logger
.
Info
(
"缓存重新提交:"
,
len
(
pointSlice
))
}
logger
.
Info
.
Println
(
"重新提交"
)
logger
.
Info
(
"重新提交"
)
return
nil
}
...
...
service/continuous_queries/apdex_continuous_query.go
View file @
b01d8b63
...
...
@@ -4,7 +4,7 @@ import (
"fmt"
"git.quantgroup.cn/DevOps/enoch/service/conf"
"git.quantgroup.cn/DevOps/enoch/service/data"
"git
.quantgroup.cn/DevOps/enoch/service/log
"
"git
hub.com/vrg0/go-common/logger
"
"net"
"os"
"strings"
...
...
@@ -20,7 +20,7 @@ var (
func
query
(
dbName
string
)
[]
string
{
cq
:=
data
.
QueryMonitor
(
SHOW_CQ_SQL
)
logger
.
Info
.
Println
(
cq
)
logger
.
Info
(
cq
)
cqName
:=
make
([]
string
,
0
)
for
_
,
row
:=
range
cq
[
0
]
.
Series
{
if
row
.
Name
==
dbName
{
...
...
@@ -43,7 +43,7 @@ func delete(db string, cqName [] string) bool {
func
create
(
apdexThreshold
conf
.
ApdexThreshold
)
{
sysName
:=
data
.
QuerySysName
()
logger
.
Info
.
Println
(
sysName
)
logger
.
Info
(
sysName
)
sql
:=
strings
.
Builder
{}
for
_
,
name
:=
range
sysName
{
cqName
:=
strings
.
Replace
(
name
,
"-"
,
"_"
,
10
)
...
...
@@ -68,11 +68,11 @@ func buildTolSql(cqName string, sysName string, threshold int) string {
func
Load
()
{
name
:=
query
(
data
.
MONITOR
)
logger
.
Info
.
Println
(
"old: "
,
name
)
logger
.
Info
(
"old: "
,
name
)
delete
(
data
.
MONITOR
,
name
)
create
(
conf
.
GlobalConfig
.
ApdexThreshold
)
name
=
query
(
data
.
MONITOR
)
logger
.
Info
.
Println
(
"new: "
,
name
)
logger
.
Info
(
"new: "
,
name
)
}
...
...
@@ -86,7 +86,7 @@ func checkIp(ip string) bool {
// 检查ip地址判断是否回环地址
if
ipnet
,
ok
:=
address
.
(
*
net
.
IPNet
);
ok
&&
!
ipnet
.
IP
.
IsLoopback
()
{
if
ipnet
.
IP
.
To4
()
!=
nil
{
logger
.
Info
.
Println
(
ipnet
.
IP
.
String
())
logger
.
Info
(
ipnet
.
IP
.
String
())
return
ipnet
.
IP
.
String
()
==
ip
}
}
...
...
service/data/influxdb_conf.go
View file @
b01d8b63
...
...
@@ -3,8 +3,8 @@ package data
import
(
"bytes"
"git.quantgroup.cn/DevOps/enoch/service/conf"
"git.quantgroup.cn/DevOps/enoch/service/log"
"github.com/influxdata/influxdb/client/v2"
"github.com/vrg0/go-common/logger"
)
func
NewClient
()
client
.
Client
{
...
...
@@ -14,7 +14,7 @@ func NewClient() client.Client {
con
,
err
:=
client
.
NewHTTPClient
(
httpConfig
)
if
err
!=
nil
{
logger
.
Error
.
Println
(
err
.
Error
())
logger
.
Error
(
err
.
Error
())
}
return
con
...
...
@@ -26,10 +26,10 @@ func Query(sql string, db string) []client.Result {
res
,
err
:=
con
.
Query
(
q
)
if
nil
!=
err
{
logger
.
Error
.
Println
(
"influxdb client init error"
,
err
)
logger
.
Error
(
"influxdb client init error"
,
err
)
}
if
nil
!=
res
.
Error
()
{
logger
.
Error
.
Println
(
"query error"
,
db
,
sql
,
res
.
Error
())
logger
.
Error
(
"query error"
,
db
,
sql
,
res
.
Error
())
}
return
res
.
Results
}
...
...
service/dingding/ding.go
View file @
b01d8b63
package
dingding
import
(
"encoding/json"
"net/http"
"strings"
)
var
DefaultDingURL
=
[]
string
{
"https://oapi.dingtalk.com/robot/send?access_token=9ffab8e4ae5f94e0fbf84aa91c9cb474d9e3d5bd0bb3c2daffe4cdfe0c2cbbc7"
}
type
DinDingMsg
struct
{
MsgType
string
`json:"msgtype"`
// Link Link `json:"link"`
Text
Text
`json:"text"`
}
type
Text
struct
{
Content
string
`json:"content"`
}
func
SenderDingDing
(
info
string
,
receiver
[]
string
)
error
{
bodyStr
:=
buildDingDingMsg
(
info
)
for
_
,
r
:=
range
receiver
{
data
:=
strings
.
NewReader
(
string
(
bodyStr
))
_
,
e
:=
http
.
Post
(
r
,
"application/json;charset=utf-8"
,
data
)
if
e
!=
nil
{
return
e
}
}
return
nil
}
func
buildDingDingMsg
(
info
string
)
[]
byte
{
msg
:=
DinDingMsg
{
MsgType
:
"text"
,
Text
:
Text
{
Content
:
info
,
},
}
msgStr
,
_
:=
json
.
Marshal
(
msg
)
return
msgStr
}
service/dingding/ding_test.go
deleted
100644 → 0
View file @
57e92151
package
dingding
import
"testing"
var
testDingUrl
=
[]
string
{
"https://oapi.dingtalk.com/robot/send?access_token=05b2c46e460e94b32044251c0f8af666c55a4600758fda508120f962d589ea47"
,
}
func
TestSenderDingDing
(
t
*
testing
.
T
)
{
e
:=
SenderDingDing
(
"叮叮测试,吧啦吧啦吧"
,
testDingUrl
)
if
e
!=
nil
{
t
.
Error
(
e
)
}
}
service/file_cache/file_cache.go
View file @
b01d8b63
...
...
@@ -3,8 +3,8 @@ package file_cache
import
(
"bufio"
"fmt"
"git.quantgroup.cn/DevOps/enoch/service/log"
"github.com/robfig/cron"
"github.com/vrg0/go-common/logger"
"io"
"io/ioutil"
"os"
...
...
@@ -76,17 +76,17 @@ func create() {
currentFile
.
fileName
=
currentFile
.
path
+
strconv
.
FormatInt
(
current
,
10
)
file
,
err
:=
os
.
Create
(
currentFile
.
fileName
+
WRITING
)
if
err
!=
nil
{
logger
.
Error
.
Println
(
"创建缓存文件失败"
,
err
)
logger
.
Error
(
"创建缓存文件失败"
,
err
)
}
logger
.
Info
.
Println
(
"打开缓存文件"
,
currentFile
.
fileName
)
logger
.
Info
(
"打开缓存文件"
,
currentFile
.
fileName
)
currentFile
.
file
=
file
currentFile
.
fileSize
.
Add
(
1
)
logger
.
Info
.
Println
(
"文件缓存数:"
,
currentFile
.
fileSize
.
Get
())
logger
.
Info
(
"文件缓存数:"
,
currentFile
.
fileSize
.
Get
())
}
func
closed
()
{
defer
os
.
Rename
(
currentFile
.
fileName
+
WRITING
,
currentFile
.
fileName
+
CACHE
)
logger
.
Info
.
Println
(
"关闭缓存文件"
)
logger
.
Info
(
"关闭缓存文件"
)
currentFile
.
file
.
Close
()
}
...
...
@@ -94,19 +94,19 @@ func Delete() {
fileNames
:=
scan
(
DELETE
)
for
_
,
name
:=
range
fileNames
{
os
.
Remove
(
currentFile
.
path
+
name
)
logger
.
Info
.
Println
(
"删除缓存文件"
,
name
)
logger
.
Info
(
"删除缓存文件"
,
name
)
}
}
func
pickup
()
{
logger
.
Info
.
Println
(
"获取缓存文件数量"
)
logger
.
Info
(
"获取缓存文件数量"
)
files
:=
scan
(
CACHE
)
currentFile
.
fileSize
.
Add
(
len
(
files
))
}
func
mark
()
{
fileName
:=
scan
(
WRITING
)
logger
.
Info
.
Println
(
"重新标记缓存文件"
)
logger
.
Info
(
"重新标记缓存文件"
)
for
_
,
name
:=
range
fileName
{
os
.
Rename
(
currentFile
.
path
+
name
,
currentFile
.
path
+
strings
.
Split
(
name
,
"."
)[
0
]
+
CACHE
)
}
...
...
@@ -120,12 +120,12 @@ func Recover(submit func(data []string) error) {
for
_
,
name
:=
range
fileNames
{
err
:=
submit
(
Read
(
currentFile
.
path
+
name
))
if
err
!=
nil
{
logger
.
Error
.
Println
(
"重新提交缓存异常:"
,
err
)
logger
.
Error
(
"重新提交缓存异常:"
,
err
)
return
}
os
.
Rename
(
currentFile
.
path
+
name
,
currentFile
.
path
+
strings
.
Split
(
name
,
"."
)[
0
]
+
DELETE
)
currentFile
.
fileSize
.
Add
(
-
1
)
logger
.
Info
.
Println
(
"文件缓存数:"
,
currentFile
.
fileSize
.
Get
())
logger
.
Info
(
"文件缓存数:"
,
currentFile
.
fileSize
.
Get
())
}
go
Delete
()
}
...
...
@@ -154,7 +154,7 @@ func scan(suffix string) []string {
func
Read
(
fileName
string
)
[]
string
{
file
,
err
:=
os
.
Open
(
fileName
)
if
err
!=
nil
{
logger
.
Error
.
Println
(
"未找到对应的文件:"
,
err
)
logger
.
Error
(
"未找到对应的文件:"
,
err
)
}
reader
:=
bufio
.
NewReader
(
file
)
data
:=
make
([]
string
,
0
)
...
...
@@ -188,7 +188,7 @@ func RegisterJob(submit func(data []string) error) {
c
:=
cron
.
New
()
err
:=
c
.
AddFunc
(
"@every 1m"
,
func
()
{
if
!
Enabled
()
{
logger
.
Info
.
Println
(
"开始扫描缓存文件"
)
logger
.
Info
(
"开始扫描缓存文件"
)
Recover
(
submit
)
}
})
...
...
service/file_cache/switcher.go
View file @
b01d8b63
...
...
@@ -2,7 +2,7 @@ package file_cache
import
(
"encoding/json"
"git
.quantgroup.cn/DevOps/enoch/service/log
"
"git
hub.com/vrg0/go-common/logger
"
"net/http"
"strings"
"sync"
...
...
@@ -44,7 +44,7 @@ func (s *switcher) status() bool {
current
:=
time
.
Now
()
.
Unix
()
diff
:=
current
-
s
.
origin
if
diff
>=
60
{
logger
.
Info
.
Println
(
"缓存切换"
)
logger
.
Info
(
"缓存切换"
)
s
.
turnOff
()
}
}
...
...
@@ -75,7 +75,7 @@ func OpenCache() {
func
senderDingDing
()
{
_
,
err
:=
http
.
Post
(
url
,
contentType
,
strings
.
NewReader
(
alterMsg
))
if
err
!=
nil
{
logger
.
Error
.
Println
(
err
)
logger
.
Error
(
err
)
}
}
...
...
@@ -88,7 +88,7 @@ func buildDingDingMsg() string {
}
msgStr
,
err
:=
json
.
Marshal
(
msg
)
if
nil
!=
err
{
logger
.
Error
.
Println
(
"无法序列化ding ding msg"
,
err
)
logger
.
Error
(
"无法序列化ding ding msg"
,
err
)
}
return
string
(
msgStr
)
}
...
...
service/job/alarm.go
View file @
b01d8b63
...
...
@@ -3,8 +3,8 @@ package job
import
(
"fmt"
"git.quantgroup.cn/DevOps/enoch/service/alarm"
"git.quantgroup.cn/DevOps/enoch/service/log"
"github.com/robfig/cron"
"github.com/vrg0/go-common/logger"
"net"
"os"
"time"
...
...
@@ -17,7 +17,7 @@ func AutoAlarm() {
c
:=
cron
.
New
()
err
:=
c
.
AddFunc
(
"@every 1m"
,
func
()
{
logger
.
Info
.
Println
(
"开始执行定时任务"
,
time
.
Now
()
.
Minute
())
logger
.
Info
(
"开始执行定时任务"
,
time
.
Now
()
.
Minute
())
alarm
.
Load
()
})
if
err
!=
nil
{
...
...
@@ -37,7 +37,7 @@ func CheckIp(ip string) bool {
// 检查ip地址判断是否回环地址
if
ipnet
,
ok
:=
address
.
(
*
net
.
IPNet
);
ok
&&
!
ipnet
.
IP
.
IsLoopback
()
{
if
ipnet
.
IP
.
To4
()
!=
nil
{
logger
.
Info
.
Println
(
ipnet
.
IP
.
String
())
logger
.
Info
(
ipnet
.
IP
.
String
())
return
ipnet
.
IP
.
String
()
==
ip
}
}
...
...
service/log/conf.go
deleted
100644 → 0
View file @
57e92151
package
logger
import
(
"io"
"log"
"os"
)
var
(
Info
*
log
.
Logger
Warning
*
log
.
Logger
Error
*
log
.
Logger
)
func
init
(){
file
,
err
:=
os
.
OpenFile
(
"quantgroup.log"
,
os
.
O_RDWR
|
os
.
O_CREATE
,
0666
)
if
err
!=
nil
{
log
.
Fatalln
(
"打开日志文件失败:"
,
err
)
}
Info
=
log
.
New
(
io
.
MultiWriter
(
os
.
Stderr
,
file
),
"Info:"
,
log
.
Ldate
|
log
.
Ltime
|
log
.
Lshortfile
)
Warning
=
log
.
New
(
io
.
MultiWriter
(
os
.
Stderr
,
file
),
"Warning:"
,
log
.
Ldate
|
log
.
Ltime
|
log
.
Lshortfile
)
Error
=
log
.
New
(
io
.
MultiWriter
(
os
.
Stderr
,
file
),
"Error:"
,
log
.
Ldate
|
log
.
Ltime
|
log
.
Lshortfile
)
}
\ No newline at end of file
service/node-check/node_check.go
View file @
b01d8b63
...
...
@@ -3,8 +3,9 @@ package node_check
import
(
"context"
"git.quantgroup.cn/DevOps/enoch/service/dingding"
"git.quantgroup.cn/DevOps/enoch/service/log"
"git.quantgroup.cn/DevOps/enoch/service/registry"
"github.com/vrg0/go-common/ding"
"github.com/vrg0/go-common/logger"
"net/http"
"os"
"sync"
...
...
@@ -53,14 +54,14 @@ func handler(serviceName string) {
if
url
,
ok
:=
HandlerMap
.
Load
(
serviceName
);
ok
{
for
i
:=
0
;
i
<
HttpGetRetryCount
;
i
++
{
if
resp
,
e
:=
httpGet
(
url
.
(
string
),
HttpTimeOut
);
e
!=
nil
{
logger
.
Error
.
Print
(
" handler service: "
,
serviceName
,
" "
,
e
)
logger
.
Error
(
" handler service: "
,
serviceName
,
" "
,
e
)
}
else
{
logger
.
Info
.
Print
(
" handler service: "
,
serviceName
,
" "
,
resp
.
StatusCode
)
logger
.
Info
(
" handler service: "
,
serviceName
,
" "
,
resp
.
StatusCode
)
break
}
}
}
else
{
logger
.
Info
.
Print
(
" handler service: "
,
serviceName
,
" "
,
"not found handler hook api"
)
logger
.
Info
(
" handler service: "
,
serviceName
,
" "
,
"not found handler hook api"
)
}
}
...
...
@@ -103,9 +104,9 @@ func (w watch) UpdateNodes(service *registry.Service) {
for
_
,
node
:=
range
service
.
NodeMap
{
if
oldNode
,
ok
:=
oldService
.
NodeMap
[
node
.
Id
];
ok
{
if
oldNode
.
Status
==
Passing
&&
node
.
Status
==
Critical
{
logger
.
Warn
ing
.
Print
(
service
.
Name
,
" "
,
node
.
Id
,
"---!!!node critical!!!---"
)
logger
.
Warn
(
service
.
Name
,
" "
,
node
.
Id
,
"---!!!node critical!!!---"
)
if
_
,
ok
:=
IgnoreServiceMap
[
service
.
Name
];
!
ok
{
_
=
ding
ding
.
SenderDingDing
(
service
.
Name
+
" "
+
node
.
Id
+
" "
+
"---!!!node critical!!!---"
,
dingding
.
DefaultDingURL
)
_
=
ding
.
SendText
(
service
.
Name
+
" "
+
node
.
Id
+
" "
+
"---!!!node critical!!!---"
,
dingding
.
DefaultDingURL
...
)
}
}
}
...
...
@@ -116,13 +117,13 @@ func (w watch) UpdateNodes(service *registry.Service) {
//如果 服务存在,并且服务的old状态为passing,并且服务的now状态为critical,则报警,否贼记录服务状态
serviceString
:=
serviceStr
(
service
)
if
oldService
,
ok
:=
servicesStatus
[
service
.
Name
];
ok
&&
serviceStatus
(
oldService
)
&&
!
serviceStatus
(
service
)
{
logger
.
Warn
ing
.
Print
(
serviceString
,
"---!!!service critical!!!---"
)
logger
.
Warn
(
serviceString
,
"---!!!service critical!!!---"
)
if
_
,
ok
:=
IgnoreServiceMap
[
service
.
Name
];
!
ok
{
_
=
ding
ding
.
SenderDingDing
(
serviceString
+
"---!!!service critical!!!---"
,
dingding
.
DefaultDingURL
)
_
=
ding
.
SendText
(
serviceString
+
"---!!!service critical!!!---"
,
dingding
.
DefaultDingURL
...
)
}
handler
(
service
.
Name
)
}
else
{
logger
.
Info
.
Print
(
serviceString
)
logger
.
Info
(
serviceString
)
}
//更新服务状态
...
...
@@ -165,8 +166,8 @@ func InitServiceStatus() {
func
NodeCheck
()
{
defer
func
()
{
if
e
:=
recover
();
e
!=
nil
{
logger
.
Info
.
Print
(
"node check panic: "
,
e
)
_
=
ding
ding
.
SenderDingDing
(
"node check panic!"
,
dingding
.
DefaultDingURL
)
logger
.
Info
(
"node check panic: "
,
e
)
_
=
ding
.
SendText
(
"node check panic!"
,
dingding
.
DefaultDingURL
...
)
time
.
Sleep
(
time
.
Second
*
1
)
NodeCheck
()
}
...
...
@@ -176,7 +177,7 @@ func NodeCheck() {
dc
:=
"3c"
cluster
:=
[]
string
{
"172.30.12.2:8500"
,
"172.30.12.3:8500"
,
"172.30.12.4:8500"
}
if
e
:=
registry
.
Init
(
"consul"
,
map
[
string
]
interface
{}{
"dc"
:
dc
,
"cluster"
:
cluster
});
e
!=
nil
{
logger
.
Info
.
Print
(
"registry init error:"
,
e
)
logger
.
Info
(
"registry init error:"
,
e
)
os
.
Exit
(
-
1
)
}
time
.
Sleep
(
time
.
Second
*
1
)
...
...
@@ -186,7 +187,7 @@ func NodeCheck() {
//设置观察者
if
e
:=
registry
.
SetObserver
(
"watch"
,
&
watch
{});
e
!=
nil
{
logger
.
Info
.
Print
(
"set observer error:"
,
e
)
logger
.
Info
(
"set observer error:"
,
e
)
os
.
Exit
(
-
1
)
}
...
...
service/registry/consul.go
View file @
b01d8b63
...
...
@@ -5,7 +5,7 @@ import (
"encoding/gob"
"errors"
"github.com/hashicorp/consul/api"
"github.com/hashicorp/consul/watch"
"github.com/hashicorp/consul/
api/
watch"
"reflect"
"strconv"
"sync"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment