|
|
filebeat是轻量级日志收集框架,go语言开发。需要在每个日志收集的终端部署,配置日志文件路径。可以将日志收集到es,logstash,这里以收集到elasticsearch为例。配置主要分为input和output两块。解压后有filebeat.yml配置文件,主要针对该文件进行配置。2 W2 }7 y/ f, s) [
) I' m* S% ^$ d) N! f- type: log& K' q8 w Z2 Z- i
#日志文件位置
# @4 ~6 Z9 C* q2 S/ O* A" I paths:
+ C( e; |0 @% [# D3 B - /data/logs/*/*.log' c: S7 x* t4 p8 R5 k; i+ N6 U1 a7 A
output.elasticsearch:
# o8 T0 z! k E- ~5 {& B #es连接信息
( A0 D8 Q$ m- n hosts: ["localhost:9200"]
' O# |: u. v3 U protocol: "http", O' i3 J) B! W% p* Z4 k& B
username: "elastic"
% ]* j9 f+ G, c F/ P# _) A. h& O password: "888888" ' N/ o8 w* X6 K! l9 B/ u9 K( |( M/ k
会自动创建一个 "filebeat-%{[agent.version]}-%{+yyyy.MM.dd}-%{index_num}"* A$ U2 d7 I7 }8 J- ~& D: ?
0 s6 V2 Q$ n# E" N ]
8 w0 `5 p X9 {* w; ~& A. I5 P, P
3 d$ k7 S( x. j例子:
, s3 ?" y9 c" ]; G6 k' w! v: K! s, t, L2 [" h0 z+ N" v- t/ d7 L
vim /etc/filebeat/filebeat.yml ( N* {1 \$ T0 i
4 C0 {9 @- u9 w! D5 pfilebeat.inputs:) y$ D% f# |! `
- type: log
p2 |+ W- q6 n; D L, L4 v enabled: true) a$ G0 l @5 O: @6 A5 R# J
paths:
! z5 l: W' r( [* ~2 K4 D; Z& i! c - /var/log/messages
) o0 e, c0 O3 M- q6 B2 Z tags: ["messages"]
/ R5 S$ Z/ `5 u* J3 Q fields_under_root: true) C5 H) W$ \; K
N% M+ ]1 L5 @2 o
- type: log, u6 L2 C' R! {
enabled: true
/ E( r& ?" W, Y- G paths:% z+ S; ~7 c# z' T5 ?' t
- /var/log/nova/nova-compute.log
1 J5 q, S0 w/ r% P tags: ["nova-compute"]
$ K, N Z$ G# i" t& L fields_under_root: true
- e: v0 {: o/ S [; i3 g c9 f* g: W& |5 p/ M g/ X0 Y
- type: log
4 _# _8 H: Z' `- \ enabled: true7 Q3 ^; t5 ^$ v" I
paths:" Z; w8 A) N5 A( x- G
- /var/log/nova/nova-manage.log4 Q5 F- ?, P) l' l D
tags: ["nova-manage"]$ w+ J" ?/ A$ j8 O, o8 F
fields_under_root: true( e2 x' P4 A" B
: P/ n9 o. F; x$ {" q# k1 R
- type: log
9 W$ a' ?5 ~. v1 R% |# w* e1 @ enabled: true
' k* B/ l- N, @3 ` paths:
* K3 z" `: q9 `& n3 t# } - /var/log/nova/scheduler.log
" K* t& N( r" a0 @2 Z* b2 j/ i6 x tags: ["scheduler"]' A5 d. ?1 i- o+ a# |- U
fields_under_root: true5 V3 S* Y7 n6 Q
1 ?8 p. ]# @; E: G2 f1 t& W - type: log4 s2 x% F! U, H: t; Q
enabled: true; d" A, c1 F3 C: |+ j) K7 N! C
paths:
+ L5 l& O% W/ a& ^: Z3 K - /var/log/nova/conductor.log- T; R; f) y; f0 v0 h
tags: ["conductor"]6 A H9 r" b2 ^5 D4 f8 h) F
fields_under_root: true
( `4 ~, p) w0 G. ^- R7 |" `
/ o4 @0 r6 B4 _% w) F - type: log V$ G$ Q5 {5 O2 P: a" T8 x# N
enabled: true; e1 q% G N7 J# @4 M: P
paths:
, [% R' T. P0 |; U6 X0 |5 F3 l - /var/log/nova/cert.log
+ B3 a& l& u$ o# V4 W& Z tags: ["cert"]$ D6 A) U0 E8 u/ g) E" n+ x* N
fields_under_root: true
: C" Q3 x2 w1 W) F5 D2 Q" b* o/ ^2 u' [$ z5 F; s* o% h
- type: log( {& x' p# C( O# A# A: f
enabled: true
* m8 r, r3 h! w. a0 G+ ]- R* F paths:
& M e0 |5 ]0 U/ j - /var/log/nova/consoleauth.log
1 o8 [# |( J! o3 y tags: ["consoleauth"]
7 ^. O7 O: a3 b: h fields_under_root: true6 U+ ?) n& B8 c& t
( e% Q. L& d* a c! Z. \
- type: log
) b% |3 [7 }! o, R enabled: true ~3 s0 ^* o p) x! |* O0 n; z- n
paths:4 p R5 A* g$ ~
- /var/log/nova/nova-novncproxy.log
! K7 a! {+ k$ y% h/ b. ^+ P tags: ["nova-novncproxy"]: K: c- U, Z4 N+ u& e `0 a3 V5 M
fields_under_root: true5 x, g0 a/ a! X; n4 [1 V
- R/ v" l- j" `8 e - type: log n. m/ f0 X; B3 U2 t0 P' Q
enabled: true- d) M. A# a7 A. y
paths:* {7 \* \8 D6 A
- /var/log/rabbitmq/rabbit*.log; E' F: f2 P9 Q' m! E
tags: ["rabbit"]
; @: j, }1 x- w; A fields_under_root: true
5 q5 z9 t. L9 x6 n
. ` v% d* v2 S/ U% o - type: log
( R5 U7 G# P" Z. g1 J3 X& y4 S enabled: true
' y' }- G2 V8 L# S% l. H paths:
& f5 z0 K/ K F% h# j$ j( [* k - /var/log/glance/*.log" i, U9 k, o& C0 E: y
tags: ["glance"]
! {5 F" H+ D6 U' s$ o fields_under_root: true: Z1 E' I% h. W1 w3 W2 T
7 }$ I. \: x$ u& r/ Z - type: log9 r5 \( Y9 l8 Y3 I1 R0 e6 v1 E8 e
enabled: true
4 R/ u! m$ R' Z& e) [ paths:
8 l/ w, F2 z- S; W& @ - /var/log/neutron/openvswitch-agent.log
. N ]/ m4 \6 T2 Z. t- J tags: ["openvswitch-agent"]% g3 E! ^! ]2 ~! Q8 H- J
fields_under_root: true( ], X6 @# y- h% |, Y
0 I! o2 I2 T8 b# N9 I4 S - type: log
7 b: Q d) }- D& p, y enabled: true
$ ~- B0 G1 |' d- f# m/ ^ paths: E/ O" i* h q4 m" k+ Y5 ^: X2 V+ a8 O4 w
- /var/log/kuryr/kuryr-controller.log: ]) I# r; M t# h0 p
tags: ["kuryr-controller"]
! x1 J! B9 r' Z& \: D( W fields_under_root: true
% W4 c z' \$ R7 Q4 j/ o+ W0 z* C0 F# J* O1 R2 y$ W
- type: log
, O. }9 W! G2 ^3 a; E enabled: true
' `0 s" G6 [7 A3 p% U& l2 G' _; ^ paths:
6 a8 N0 x G8 D% c2 ?4 d - /var/log/keystone/keystone.log2 u+ H0 }( s1 A8 Q
tags: ["keystone"]2 ]7 g3 I- J" d6 ` A- i# y$ V
fields_under_root: true) }$ ?' U# S0 N. h: V* s |5 ~
2 r" a/ `( i4 ^' `: }% C
output.elasticsearch:1 W* m2 I2 k2 j4 x
hosts: ["172.24.110.12:9200", "172.24.110.12:9200"]0 A% v0 H% U* f
username: elastic
' X4 |$ l' x- z8 w* M. N4 z, o password: xxxxxxx
7 c5 ?4 o- y# u5 n indices:% P- l: _, Z( Z5 s- u' p
- index: "compute_messages-error-%{[agent.version]}-%{+yyyy.MM.dd}"
. e- @! X! X# y& {2 q when:
9 [, G7 l, G. _$ | or:- t: L. X) i& H6 }, ~ M9 [
- contains:
+ p( H1 H2 _( K. g: Z$ U tags: "messages": n3 `. _1 e' R3 ^; F& W
message: "err": t5 c. B; G7 N$ o
- contains:" D% Z9 Q3 H: l9 \7 h; D
tags: "messages"
% E( ^. Y/ n, Q/ J message: "ERR"3 M% k; h1 \ b8 U
- contains:# W% c* i* W6 V/ [1 K- ]. X- | ` N# m
tags: "messages"( Q/ t, n# P- c6 M; S6 f/ c9 k% U$ a+ p
message: "fail"
( U( ^3 ^* V. `% U - index: "compute_messages-%{[agent.version]}-%{+yyyy.MM.dd}") ? I* Z: X% I( s9 E
when.contains:
* K0 Y3 O; ~6 r2 }/ d tags: "messages"
5 W+ T" @( F; \" t1 i - index: "compute_nova-compute-error-%{[agent.version]}-%{+yyyy.MM.dd}"
% L6 @+ ~( m8 A/ S, | when:
3 O8 ^% j1 L) o A7 i* w9 f" v or:! F# ^% U: A5 w
- contains:
' f8 X8 T: j Z# W; F tags: "nova-compute"
# T! k: E) i3 q2 J1 Y/ z% W message: "err"4 [! A/ Q5 A& J- J- t' w
- contains:; j1 x0 j; P) ~" s& E! v! _
tags: "nova-compute"
/ w! K' @; g% @5 w message: "ERR": \8 p# e; w6 d; f3 @: Q
- contains:
, h9 j& z: _" @# N tags: "nova-compute"
`9 Z/ T. A0 D8 n- K8 P' ] message: "fail"
9 h* O h% d8 E; E - index: "compute_nova-compute-%{[agent.version]}-%{+yyyy.MM.dd}"
9 _- |7 }; ^) A% H" X when.contains:
. G/ {$ p1 O; V s9 @ tags: "nova-compute"
/ K3 B" ~ k y- g; {; V+ t6 z: L5 Y$ u! H5 P5 f
- index: "controller_nova-manage-error-%{[agent.version]}-%{+yyyy.MM.dd}"
/ w9 A% t! G" R6 ^& p2 ? when:
" @5 K6 ~ o' v) u2 H! }; X or:
1 o% b0 C B# v R0 E7 h, b4 J - contains:
+ y# E- o( q( g% ^ tags: "nova-manage"
! k3 A/ Z B6 \- o8 ? o1 l message: "err" h& O6 k$ G6 p7 E
- contains:
6 i5 h* e) \5 V Y tags: "nova-manage"
( o9 I& Q1 }* n6 _9 } message: "ERR"
, W+ o4 V, B0 q1 w2 V' \8 G( j - contains:$ h1 J% V. Q* x: F& Q3 u$ k
tags: "nova-manage"; i: G' f. O8 x6 o
message: "fail") i" u7 H' j' ~+ ?5 R
- index: "controller_nova-manage-%{[agent.version]}-%{+yyyy.MM.dd}"
E ], H5 V [# z when.contains:; k7 L# a$ X" n8 V- Y% b" ^# D! V
tags: "nova-manage"3 K9 l3 u( ^: J6 m$ ?
9 \. J8 A; Y; K& t P- O% ]$ c - index: "controller_scheduler-error-%{[agent.version]}-%{+yyyy.MM.dd}"
& S" ` P, {5 a when:
; Q! H4 J! ?9 h5 D1 q or:1 K9 d' f- b' h* i# B- S
- contains:9 B9 x1 n9 z! ~: M- U7 X
tags: "scheduler"
) f4 j) l* c4 T v message: "err"
) y% m/ M/ v+ A+ e4 ^ r - contains:
5 Q1 Q! G8 J9 R, u tags: "scheduler"
" h. s2 K1 {% r6 _) \+ V7 J message: "ERR"
" e0 }/ b( ]+ _- h0 _ - contains:+ o# _/ a+ E0 T. n- A
tags: "scheduler"
" p$ g, d$ _2 ^ k" q message: "fail"
& u3 @! Z: U/ U4 O4 F/ P9 I - index: "controller_scheduler-%{[agent.version]}-%{+yyyy.MM.dd}"& c: ]9 V8 z5 t0 h9 _% a
when.contains:! w: k* ~0 a; v# f& t* t0 M
tags: "scheduler"
7 V8 w# Z0 x0 X+ ], z- w. ?5 ~) d0 i- w8 e' W
- index: "controller_conductor-error-%{[agent.version]}-%{+yyyy.MM.dd}" N7 l- I1 | A7 n5 F x- X8 x
when:. ^) M* i M4 O
or:
. l; [& W' @: r( ]! n# Q - contains:
: `, C3 r1 u1 ~ tags: "conductor"
# p% Q; u! e( b% l0 e8 ~1 |) U message: "err" H4 h0 _% N0 K8 _
- contains:9 a1 Z4 Y7 S) g! z
tags: "conductor"; p8 r9 L8 U5 b, u
message: "ERR"
$ z5 |7 y: n6 N4 t6 P6 ] - contains:+ @. i: {6 w% _
tags: "conductor"
3 h; J6 E% ?7 ]( O0 T message: "fail"# Z" I1 f9 ?3 I* j
- index: "controller_conductor-%{[agent.version]}-%{+yyyy.MM.dd}"
: E1 m2 e( U7 e, i when.contains:$ \" m6 \+ y) D* }' d+ G
tags: "conductor"' S! A" G9 H& w0 {# E k0 \
% n& q* L2 I) ~8 ] N - index: "controller_cert-error-%{[agent.version]}-%{+yyyy.MM.dd}"& k4 T3 v5 f# a/ C5 j5 [
when:- R* V" j& z4 W" Y( N
or:
( ^( V; Q% P& M) z/ a: W - contains:& U/ L3 Z$ d% L2 \% d
tags: "cert"6 z/ {/ |2 t7 S! c! I$ Y/ A
message: "err"
" y6 {9 L! ^& N5 J' t - contains:9 {/ s2 x( L6 r" ^" [! K
tags: "cert"
" p2 i: V k. m) d, W; |% p! E2 U message: "ERR"# ^5 \5 Z8 U- N7 q
- contains:. F. b* Y8 P% C+ x+ N, V. t: C2 e
tags: "cert"
+ X) V' Z/ j: c message: "fail"
5 c" l9 R7 n& _ - index: "controller_cert-%{[agent.version]}-%{+yyyy.MM.dd}"
0 ]. F9 s) F. O; T# \% ^ when.contains:- q* j- _% T9 P; p( l
tags: "cert"
! E! I" C( u8 R2 H1 T
7 G) M2 _# K4 m: N9 |% X - index: "controller_consoleauth-error-%{[agent.version]}-%{+yyyy.MM.dd}"
8 b J' ?% w/ Q* g! `) Y3 w when:
4 [3 W/ G1 i- u) _4 Z2 T' X: c or:
! {) O. H& D0 s# q2 f: K - contains:
7 V# O; d R+ y tags: "consoleauth"
7 h% G- Q. p2 Q! s& ]% f# K! B message: "err"4 F" U: D. w- U" }$ m% ^4 v8 @
- contains:
; i g+ I; {# U: o tags: "consoleauth"# B$ N9 N. `+ D: q Z, |8 e; C
message: "ERR", {. L* W4 S2 ?% V
- contains:
. G/ `& {0 I- C" v tags: "consoleauth"
. |) h e7 [1 ? message: "fail"
2 R$ v) S+ J/ N4 R1 t' k1 Q - index: "controller_consoleauth-%{[agent.version]}-%{+yyyy.MM.dd}"
8 ?9 [7 h5 i8 R7 D# ]5 ?6 ^ when.contains:
_; M; J3 z7 y) w/ M$ k" r7 [ tags: "consoleauth") C s, O2 l% w
# J) I: A- v2 S) ]( p$ E9 `3 F7 a - index: "controller_nova-novncproxy-error-%{[agent.version]}-%{+yyyy.MM.dd}"
1 a7 u) \' N+ c) }8 M7 @+ [+ y R when:- c J- m1 h8 |
or:
+ ?" J1 B% g0 A" B, T) y9 D0 J+ Z( W - contains:6 {2 K# ?& _6 ^8 ^
tags: "nova-novncproxy"0 U) Y" G) }0 R2 e8 c, |
message: "err"
+ p. K) D& _3 Z A( v% ], r# m5 D - contains:3 `. R0 v1 B f2 A7 N
tags: "nova-novncproxy"
9 C$ E1 }3 r1 X0 p" L/ k, k message: "ERR"; p [! B6 z- p, V: f: v
- contains:
4 o% |! m) X+ a% A tags: "nova-novncproxy"* w" ?% r7 o8 p6 [ P3 O6 _
message: "fail"' w6 d* k7 l% M) e7 J
- index: "controller_nova-novncproxy-%{[agent.version]}-%{+yyyy.MM.dd}"1 @, K% N: i& D u3 k! S
when.contains:: e/ s2 ?4 V6 Z# {% }! ~; R# d
tags: "nova-novncproxy"5 g* R V( {& e+ H2 z* a2 ?3 |( Y- C
/ e! X/ }+ y. n0 \# a2 @8 `
- index: "controller_rabbit-error-%{[agent.version]}-%{+yyyy.MM.dd}"
0 w l, S# Y# p when:
1 E0 @4 |0 @- e0 s; K8 x or:7 W* N) J- I( h& E6 [) j6 O7 Q
- contains:
! }% L; e+ Y) o/ K3 X tags: "rabbit"
+ B! \; M4 `6 _9 m message: "err"
& {3 F- b U& B4 q& I0 o - contains:
/ k4 E( y8 M0 e4 _; b tags: "rabbit"
( v! B3 v/ |, k: g message: "ERR"
. x+ `: }' j" [$ z& b - contains:
3 @& ^% l& k1 Y( N3 n" K4 W0 i tags: "rabbit": p/ D5 X* e X
message: "fail"
% L0 \. i' d/ `, @+ @ - index: "controller_rabbit-%{[agent.version]}-%{+yyyy.MM.dd}"
$ R# B# i+ N' C$ s1 o8 L b when.contains: k* h; k- a6 i4 l9 L* Y
tags: "rabbit"( Q6 A v$ d, r* Q9 F' F1 l* x
, W& R, z4 ]2 A - index: "controller_glance-error-%{[agent.version]}-%{+yyyy.MM.dd}"7 |% [+ E+ K2 d' b& [- V
when:& m5 o, v8 O6 X( M! R: O
or:
! \8 M% u: i4 U% f - contains:' U! T# G" o" T- |
tags: "glance"
7 E0 [# p& g2 f/ h message: "err"
$ O6 r8 n; z! ^! z - contains:
/ u0 O8 E" f) Q8 q L4 R2 e6 T tags: "glance"
% P% T* }# T7 B4 O; |- y" S/ W message: "ERR"
+ h' ~& K X& h6 h9 K3 R - contains:2 S( ?( j+ P1 l6 d
tags: "glance"
7 s _* v/ X) B' g* F message: "fail"
# f" z9 h* N% Y8 }7 c7 _& P7 x - index: "controller_glance-%{[agent.version]}-%{+yyyy.MM.dd}"
. S& g) W$ F$ Z3 v" Q' W/ J when.contains:
7 M4 O8 ]9 X* v tags: "glance"
& I `! o5 t3 s, R8 |4 ?1 a
" V' @, P/ E+ @- u1 N; S - index: "controller_openvswitch-agent-error-%{[agent.version]}-%{+yyyy.MM.dd}"8 e2 O- c& J7 T! m% B2 x, a' h% u
when:& D3 k" p+ I/ u
or:
* s. v9 K. a+ j4 w! `5 s8 j - contains:
) Y" N7 h7 X( C& H& G% f% l tags: "openvswitch-agent"
3 k( I: Z. Y9 z- T/ u message: "err"9 m4 N* Z1 x& t% |" x0 ]. U$ H
- contains:
. V% N" y) ^4 W( K" l7 p- ~ tags: "openvswitch-agent"
2 f$ d2 e# p" X7 J message: "ERR": K$ X1 S6 S! B3 c
- contains:
8 c; W8 g. V; Q( ` tags: "openvswitch-agent"/ ^9 m- V% A& x% u' T0 L
message: "fail"+ R1 Q$ u" {7 q' b5 u: d
- index: "controller_openvswitch-agent-%{[agent.version]}-%{+yyyy.MM.dd}"
8 L3 ]: G" a' P* Y) ?' N when.contains:
% {& v. w K- x9 W% I) P tags: "openvswitch-agent"
0 O7 c: I N, a `, I+ [! u! u8 w# A3 s2 M
- index: "controller_kuryr-controller-error-%{[agent.version]}-%{+yyyy.MM.dd}"
# i! T" B' l$ G: L when:8 a1 E. z( m* B( s# Z
or:
; M6 z! I- S+ ]0 F: o - contains:$ n5 Y2 v4 b) G- K9 g1 B& k/ v" t
tags: "kuryr-controller"
4 ]: f+ N+ M3 a message: "err"
% \/ D$ L$ F/ R8 j# D* _% M8 Y* n - contains:: s4 |. E; V, J `0 f1 V! X
tags: "kuryr-controller"
}9 Y! D4 [3 q0 N message: "ERR"7 T! m1 ^' V4 y5 L* ]) M" e
- contains:
) \" x4 n0 o' r) q tags: "kuryr-controller"/ w7 Q9 t; K* o9 V) J# V1 J1 K3 K
message: "fail"& ?1 p$ D: [9 ~# a, C8 `+ q7 I
- index: "controller_kuryr-controller-%{[agent.version]}-%{+yyyy.MM.dd}"
& M! ?+ W* M; Q# a% B3 B9 U when.contains:* n) l0 J) F+ d Q
tags: "kuryr-controller"
0 ]0 T; K' s V: f
9 l9 X* L4 p% F; j+ l - index: "controller_keystone-error-%{[agent.version]}-%{+yyyy.MM.dd}"4 b. R& X. L- y( F4 O/ t, l
when:. [. s: V/ j! f) A* S- z
or:" |) ?: q$ s6 L) R( n0 ?
- contains:' W: p6 Y( ~6 b5 W+ _
tags: "keystone"
* G( [% Z/ k* X/ F" F message: "err"
, _2 x% X6 @3 u4 H - contains:
9 H5 T3 N$ ?1 w( N" s7 G* d! U% U tags: "keystone"
7 g2 `/ Q# M% `" b message: "ERR" _! ?( ?$ ~, C0 r v4 D4 }& i- _3 M
- contains:9 Y' O* @$ h7 I. W0 {- r0 r# W8 Q
tags: "keystone"
" ]! S+ O3 k8 v- n# z3 t+ r message: "fail"
1 ? W! Q9 \3 p: l2 o0 E, S - index: "controller_keystone-%{[agent.version]}-%{+yyyy.MM.dd}"
; j; h' Y0 ^. [) X when.contains:, V" X% Q. \: F. S t
tags: "keystone"/ U# s) B5 `5 l2 w1 ]2 i3 B
; G! M$ o; Q6 E0 v3 H% M7 \) dsetup.ilm.enabled: false* Q/ S& \$ A2 s4 n* E
setup.template.name: system. t+ l3 a/ S6 M3 E$ P
setup.template.pattern: system-*
2 O4 F, H5 S) x! ]% T0 S0 \$ Z- Z9 R3 W B* W4 `
1 C$ S* y& L8 I4 A5 q! U& g, c, [% R; N+ p8 G
% |6 z- D4 A( G& y+ f例:filebeat-7.12.1-2023.05.16-000001索引文件
$ [: u, V9 K7 ^3 c* G7 U9 p
7 l+ o. f$ S4 z& n索引创建规则
. a- [. F/ g9 \
$ E; F6 k: I, M默认使用es的索引声明周期策略
0 C* Y0 f- W! {! b7 A0 }6 q+ e N& W% E' b
index lifecycle management (ILM) 生成索引
: Q2 K6 R: V, }6 r/ g1 d. I3 i5 Z |( B+ v% J
配置ILM
/ U3 I* O* M' w- \7 [. H
, l( W; ?, Z9 {% h4 h5 M#auto false true
" r3 K7 A! Z- hsetup.ilm.enabled: auto
4 B \) P* Q- ?1 G- t#索引别名
" [, l+ t. B8 j& b% D t2 z0 Psetup.ilm.rollover_alias: "filebeat"/ o4 J8 ]8 l9 W8 M& C3 A
#索引增加策略
" @) V* h$ H: v+ @$ e8 G+ dsetup.ilm.pattern: "{now/d}-000001"
; ?0 Y' s# k3 d0 \7 jsetup.ilm.enabled默认值auto,自动使用es中filebeat生命周期策略创建索引 } Y+ C" f( I
- _" [; O) F( x- @, _7 Ysetup.ilm.rollover_alias默认值filebeat-%{[agent.version]} ,创建索引时指定索引别名。* s7 e& d$ [" Z5 b) M" E8 X
) d3 ~8 M" j- y
setup.ilm.pattern默认值%{now/d}-000001,索引rollover增加策略。. l1 H1 P7 u! J; G6 v7 H8 L m7 i
/ K; e2 d- b' y0 v自动生成的索引名就是使用alias+pattern。类似filebeat-7.12.1-2023.05.16-000001这种。+ Y% T: v3 O8 V
( X( C; A3 b z7 k更多配置参考:https://www.elastic.co/guide/en/beats/filebeat/7.17/ilm.html7 ^* l4 b! q/ t% F+ A
0 Z# x" n' u% Y8 U# {
自定义索引文件
9 k3 d+ C' y7 [( i% h
4 g, J' [6 p5 {# Q' I$ @output.elasticsearch可以指定index,使用自定义索引第一步就是要关闭ILM,
! `0 Q2 Q1 b$ n" l) V; |4 S! O& w9 r8 r' g, e+ }2 z
setup.ilm.enabled: false
7 ]. f1 c6 y0 h" S1 z下一步要配置setup.template.name和setup.template.pattern7 \8 \7 F- \, f
4 J+ p! y2 f7 @ l7 D$ Rsetup.template.name: "filebeat"
7 P/ p3 N/ g! k) L7 tsetup.template.pattern: "filebeat-*"' g# |0 n/ \, ?2 t$ O( H
setup.template.overwrite: false
9 }; m& x. G; R9 p* u' y8 t在output.elasticsearch指定index. W) l3 Q, \# J1 |( f
, _& B) a/ h3 q( \2 ]& z
index: "spring-%{[agent.version]}-%{+yyyy.MM.dd}"+ u5 V1 D+ G2 W# j- e' s- W
运行就会自动生成索引spring-7.12.1-2023.05.16。index定义可以使用上下文定义变量。可以在input里自定义field' m* W* v# W! ]0 P& K
Q* A/ f% N% l# H! m
fields:
: x3 `+ T/ p4 V. i& K" N level: system o6 H# h8 x9 q/ f7 B+ h
region: A1! b/ F, U9 k9 d7 a3 G
自定义的fields会一并push到索引中,index中使用自定义的fields
6 D( ^; ]7 h! E/ Q
; q7 X+ ^$ @+ b2 t3 y3 bindex: "spring-%{[fields.region]}-%{[agent.version]}-%{+yyyy.MM.dd}"! p$ X- X' O" I0 c! L+ }
会生成索引:spring-a1-7.12.1-2023.05.16。这里A1自动转成小写了。1 z5 b) U9 H1 W" T3 X- @
6 k. U% O; A9 F# K( L! H( T日志多行合并1 @" H; l+ @( Z: W5 M2 ]
) c: J5 x: T; u. U8 p
默认情况下收集日志一行一条记录,有些情况下比如格式化输出,异常栈。一条完整的日志会包含多行数据。这时候就需要配置多行匹配。配置项在filebeat.inputs里
& ]# F5 `7 ^! L5 z# X# W, {( p3 n: o
multiline.pattern: '^\['8 g/ X. Y' ^% c: i
multiline.negate: true
) ]. P% x. J- D$ ^, omultiline.match: after; B8 }$ D1 p- k: m0 c- @& l
multiline.pattern指定日志匹配正则,这里'^['就是匹配以 [ 开头的行。这个地方的具体格式就要合实际输出的日志格式相匹配了。
* f; a8 W6 J. Y$ E- U1 n
. h5 i+ \3 j& v, wnegate和match两个参数结合使用,没太看懂,理解其来感觉有点绕,自己看官方演示例子吧https://www.elastic.co/guide/en/ ... iline-examples.html,有个表格图例。大体意思就是遇到不匹配的是向上合并还是向下合并,归属于那一条。这里配置true和after就是不匹配的格式行归属到上一个匹配的结果行。
* k4 `6 z2 M% g1 }$ R# O) O' r9 f" G ]" \
根据条件写入不同索引3 k( u7 Z. W0 W% D$ h8 U
2 j) N& ?" a5 z4 q, V; ~3 @( W5 ?/ ^0 F4 Boutput.elasticsearch:2 x. H$ t. g: \
hosts: ["http://localhost:9200"]
* e. O6 c( k2 w& i) H' z" G indices:
7 s% Z# o' I; q4 N$ ~ - index: "warning-%{[agent.version]}-%{+yyyy.MM.dd}"+ E; a- M# A; ]# ~( k
when.contains:+ z* s" a' n/ B( |5 ? `% E4 @! ^
message: "WARN"4 x# H& S) ^( B
- index: "error-%{[agent.version]}-%{+yyyy.MM.dd}", v" s- T1 f0 Z6 d3 ^9 N
when.contains:
. U$ o- K" R* }/ R# h message: "ERR"# W0 I2 i* \& `& Z/ C1 H1 ?* @+ e
/ R6 ^4 U9 a. G# N8 A7 y判断message内容,是否包含某些内容。不做演示。5 J0 V& d1 J [# x8 f/ q
+ o H, S( c0 W7 I% q3 O
收集到的日志可在kibana 日志功能界面化查看检索。需要配置日志索引匹配模式,例如上面的我们就需要新增匹配日志模式spring-*。
$ a+ Z9 T5 |0 A5 ~$ Z4 ~# |1 _- T3 U: ~) Y# t
最后filebeat.yml有效配置大概这样0 O- S+ l% ^. l$ a
( s+ ~! }5 a, F F3 M( Q
filebeat.inputs:
D2 d: _9 C2 |* p! F- type: log
! p5 E0 }' ]. ?# h& w5 r8 |$ D enabled: true
7 `$ R; d# r! _4 ?/ y7 \0 q, C) H paths:2 L9 v! ~, C3 T, Q) W3 b
- /data/logs/*/*.log+ X; P3 z& k4 G) G! O; i/ s* x \; X
+ f! m* d4 F+ V0 g) {7 w fields:) F# Q+ ^ l' M' K9 r8 u' J
level: system& h* c9 L8 K) Y# Z; s9 y& W# y
region: A1) M8 B m; |. \( e! R. l& V$ d; U% R" j
% r$ |0 u) C3 o- ?' u multiline.pattern: '^#\['
; v: V+ Z1 J, ?6 f multiline.negate: true; N# e1 E3 m$ ^! |' L
multiline.match: after
2 t* c! s( z7 N' R( I
9 d4 Z, g' G% T' B& A9 foutput.elasticsearch:% j8 S( |) r% b7 j1 V, i
hosts: ["localhost:9200"]
4 U# X0 Z( Y; p- Z protocol: "http"/ H7 _! p% z4 f" D n! h" Y$ f
username: "elastic"
9 V* Y8 P) O3 h. p. ~ password: "888888"( Z' |/ n1 c4 w; T
index: "spring-%{[fields.region]}-%{[agent.version]}-%{+yyyy.MM.dd}"
7 h* L E `# [" T+ o7 K$ K
p9 B" J/ F/ \8 _+ G/ dsetup.ilm.enabled: false
) D7 m4 s2 ? I- F- v osetup.template.name: "filebeat"
: e/ A+ k3 v1 n+ z1 k- O9 _setup.template.pattern: "filebeat-*"
% b5 o. M, N$ G- ?setup.template.overwrite: false
$ n& h/ E, O% [$ s% l' A( S, @% d8 {& g! {" m3 V9 B1 Z
8 L4 H1 u" B4 s; @7 z4 _0 X8 [ |
|