testgrok.go 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package main
  2. import (
  3. "fmt"
  4. "github.com/gemsi/grok"
  5. )
  6. func main() {
  7. // event()
  8. systemlog()
  9. }
  10. func event() {
  11. g, _ := grok.New()
  12. p := map[string]string {
  13. "MONTHDAY": `(?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9])`,
  14. "MONTHNUM": `(?:0?[1-9]|1[0-2])`,
  15. "HOUR": `(?:2[0123]|[01]?[0-9])`,
  16. "MINUTE": `(?:[0-5][0-9])`,
  17. "SECOND": `(?:(?:[0-5][0-9]|60)(?:[:.,][0-9]+)?)`,
  18. "TIME": `([^0-9]?)%{HOUR}:%{MINUTE}(?::%{SECOND})([^0-9]?)`,
  19. "YEAR": `(\d\d){1,2}`,
  20. "MX_SOURCE": `[a-zA-Z0-9._-]+`,
  21. "MX_SERVERITY": `[\p{Han}]{2}`,
  22. "MX_EVENTID": `[0-9]+`,
  23. "MX_CLASS": `[\p{Han}a-zA-Z0-9/]+`,
  24. "MX_SUMMARY": `.+`,
  25. "MX_CDATETIME": `%{YEAR}[/-]%{MONTHNUM}[/-]%{MONTHDAY} %{TIME}`,
  26. "MX_EVENT_WINDOWS_LOG": `%{MX_SERVERITY}\t%{MX_CDATETIME}\t%{MX_SOURCE}\t%{MX_EVENTID}\t%{MX_CLASS}\t%{MX_SUMMARY}`,
  27. }
  28. for k, v := range p {
  29. fmt.Printf("%s:%s\n",k,v)
  30. }
  31. g.AddPatternsFromMap(p)
  32. msg := `错误 2015/10/08 18:19:10 Microsoft-Windows-EapHost 4390 日志记录/恢复 SettingSyncHost (9152) 无法创建新的日志文件,因为数据库无法写入日志驱动器。该驱动器可能为只读、磁盘空间不足、配置错误或已损坏。错误 -1032。`
  33. ok, _ := g.Match("%{MX_EVENT_WINDOWS_LOG}", msg)
  34. if !ok {
  35. fmt.Printf("%s\n", "error")
  36. }
  37. values, err := g.Parse("%{MX_EVENT_WINDOWS_LOG}", msg)
  38. if err != nil {
  39. fmt.Printf("%s\n", err.Error())
  40. }
  41. fmt.Println("-----------------------------------------------")
  42. for k, v := range values {
  43. fmt.Printf("%+15s: %s\n", k, v)
  44. }
  45. }
  46. func systemlog() {
  47. g, _ := grok.New()
  48. p := map[string]string {
  49. "MONTHDAY": `(?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9])`,
  50. "MONTHNUM": `(?:0?[1-9]|1[0-2])`,
  51. "HOUR": `(?:2[0123]|[01]?[0-9])`,
  52. "MINUTE": `(?:[0-5][0-9])`,
  53. "SECOND": `(?:(?:[0-5][0-9]|60)(?:[:.,][0-9]+)?)`,
  54. "TIME": `([^0-9]?)%{HOUR}:%{MINUTE}(?::%{SECOND})([^0-9]?)`,
  55. "YEAR": `(\d\d){1,2}`,
  56. "MX_SERVERITY": `[A-Z]{2,8}`,
  57. "MX_TYPE": `\[[a-zA-Z0-9/.-_]+\]`,
  58. "MX_SUMMARY": `.+`,
  59. "MX_CDATETIME": `%{YEAR}[/-]%{MONTHNUM}[/-]%{MONTHDAY} %{TIME},[0-9]{3}`,
  60. "MX_CAS_SYSTEMLOG": `%{MX_SERVERITY}[\s]{1,4}%{MX_TYPE}[\s]%{MX_CDATETIME}\s%{MX_SUMMARY}`,
  61. }
  62. for k, v := range p {
  63. fmt.Printf("%s:%s\n",k,v)
  64. }
  65. g.AddPatternsFromMap(p)
  66. msg := `INFO [main] 2015-11-04 18:01:56,789 Index.java:95 - Initializing Lucene index`
  67. ok, _ := g.Match("%{MX_CAS_SYSTEMLOG}", msg)
  68. if !ok {
  69. fmt.Printf("%s\n", "error")
  70. }
  71. values, err := g.Parse("%{MX_CAS_SYSTEMLOG}", msg)
  72. if err != nil {
  73. fmt.Printf("%s\n", err.Error())
  74. }
  75. fmt.Println("-----------------------------------------------")
  76. for k, v := range values {
  77. fmt.Printf("%+15s: %s\n", k, v)
  78. }
  79. }