@@ -47,29 +47,15 @@ type Msg struct {
4747 DeviceInfo map [string ]string // Device info
4848}
4949
50- // 创建一个包含所有错误信息的切片,用于遍历
51- // 这里手动将常量和对应的码绑定,确保顺序一致
52- var errorList = map [string ]int {
53- OomError : 0 ,
54- NfConntrackTableFull : 0 ,
55- DropPacket : 0 ,
56- WillResetAdapter : 0 ,
57- MemoryError : 0 ,
58- ResetSuccessfulForScsi : 0 ,
59- CallTrace : 0 ,
60- Segfault : 0 ,
61- NicLinkDown : 0 ,
62- Ext4FsError : 0 ,
63- MediumError : 0 ,
64- PackageTemperatureAboveThreshold : 0 ,
65- }
66-
6750type Instance struct {
6851 config.InstanceConfig
6952
7053 ExternalKeywords []string `toml:"external_keywords"`
7154
7255 conn syscall.RawConn
56+ file * os.File
57+
58+ errorList map [string ]int
7359}
7460
7561func (ins * Instance ) Init () error {
@@ -84,14 +70,32 @@ func (ins *Instance) Init() error {
8470
8571 ins .conn , err = f .SyscallConn ()
8672 if err != nil {
73+ f .Close ()
8774 log .Println ("Error getting raw connection:" , err )
8875 return err
8976 }
9077
78+ ins .errorList = map [string ]int {
79+ OomError : 0 ,
80+ NfConntrackTableFull : 0 ,
81+ DropPacket : 0 ,
82+ WillResetAdapter : 0 ,
83+ MemoryError : 0 ,
84+ ResetSuccessfulForScsi : 0 ,
85+ CallTrace : 0 ,
86+ Segfault : 0 ,
87+ NicLinkDown : 0 ,
88+ Ext4FsError : 0 ,
89+ MediumError : 0 ,
90+ PackageTemperatureAboveThreshold : 0 ,
91+ }
92+
9193 for _ , keyword := range ins .ExternalKeywords {
92- errorList [keyword ] = 0
94+ ins . errorList [keyword ] = 0
9395 }
9496
97+ ins .file = f
98+
9599 return nil
96100}
97101
@@ -154,25 +158,32 @@ func (ins *Instance) Gather(slist *types.SampleList) {
154158
155159 if err != nil {
156160 log .Println ("Error reading from /dev/kmsg:" , err )
157- slist .PushFront (types .NewSample (inputName , "up" , 1 , nil ))
161+ slist .PushFront (types .NewSample (inputName , "up" , 0 , nil ))
158162 return
159163 }
160164
165+ slist .PushFront (types .NewSample (inputName , "up" , 1 , nil ))
161166 for _ , d := range msgs {
162- for keyword := range errorList {
167+ for keyword := range ins . errorList {
163168 if strings .Contains (d .Text , keyword ) {
164- errorList [keyword ] += 1
169+ ins . errorList [keyword ]++
165170 }
166171 }
167172 }
168- for keyword , count := range errorList {
173+ for keyword , count := range ins . errorList {
169174 slist .PushFront (types .NewSample (inputName , "hit_keyword" , count , map [string ]string {
170175 "keyword" : keyword ,
171176 }))
172177 }
173178
174179}
175180
181+ func (ins * Instance ) Cleanup () {
182+ if ins .file != nil {
183+ ins .file .Close ()
184+ }
185+ }
186+
176187func parseData (data []byte ) * Msg {
177188 msg := Msg {}
178189
0 commit comments