天天看點

ELKStack實時分析Haproxy通路日志配置

1.Haproxy配置日志規則

在/etc/haproxy/haproxy.conf的frontend下增加

1

2

3

4

5

6

7

8

9

<code>option httplog</code>

<code>option logasap</code>

<code>log LogServerIP local5</code>

<code>capture request header Host len 40</code>

<code>capture request header X-Forwarded-For len 50</code>

<code>#capture request header Accept-Language len 50</code>

<code>capture request header Referer len 200</code>

<code>capture request header User-Agent len 200</code>

2.syslog配置開啟遠端接收

3.Logstash配置

indexer

10

11

12

13

14

15

16

17

18

19

20

21

22

23

<code>input {</code>

<code>        </code><code>file</code> <code>{</code>

<code>                </code><code>path =&gt; </code><code>"/var/log/haproxy.log"</code>

<code>                </code><code>start_position =&gt; beginning</code>

<code>                </code><code>sincedb_write_interval =&gt; 0</code>

<code>                </code><code>type</code> <code>=&gt; </code><code>"HAPROXY_LOG"</code>

<code>                </code><code>codec =&gt; plain {</code>

<code>                        </code><code>charset =&gt; </code><code>"ISO-8859-1"</code>

<code>                </code><code>}</code>

<code>        </code><code>}</code>

<code>}</code>

<code>output {</code>

<code>        </code><code>#stdout { codec =&gt; rubydebug}</code>

<code>        </code><code>redis {</code>

<code>                </code><code>data_type =&gt; </code><code>"list"</code>

<code>                </code><code>key =&gt; </code><code>"logstash:Haproxy_log"</code>

<code>                </code><code>host =&gt; </code><code>"192.168.1.2"</code>

<code>                </code><code>port =&gt; 6379</code>

shipping

在logstash配置檔案目錄下建立patterns目錄,并在這個目錄下建立一個haproxy的檔案

vim /usr/local/logstash2.2.2/conf/patterns/haproxy

<code>HAPROXYTIME (?!&lt;[0-9])%{HOUR:haproxy_hour}:%{MINUTE:haproxy_minute}(?::%{SECOND:haproxy_second})(?![0-9])</code>

<code>HAPROXYDATE %{MONTHDAY:haproxy_monthday}/%{MONTH:haproxy_month}/%{YEAR:haproxy_year}:%{HAPROXYTIME:haproxy_time}.%{INT:haproxy_milliseconds}</code>

vim /usr/local/logstash2.2.2/conf/haproxy.conf

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

<code>    </code><code>redis {</code>

<code>        </code><code>data_type =&gt; </code><code>"list"</code>

<code>        </code><code>key =&gt; </code><code>"logstash:Haproxy_log"</code>

<code>        </code><code>host =&gt; </code><code>"192.168.1.2"</code>

<code>        </code><code>port =&gt; 6379</code>

<code>        </code><code>threads =&gt; 5</code>

<code>    </code><code>type</code> <code>=&gt; </code><code>"HAPROXY_LOG"</code>

<code>    </code><code>}</code>

<code>filter {</code>

<code>       </code><code>grok{</code>

<code>    </code><code>patterns_dir =&gt; </code><code>"./patterns"</code>

<code>          </code><code>match =&gt; [</code><code>"message"</code> <code>, </code><code>"%{SYSLOGTIMESTAMP:Syslog_Timestamp} %{IPORHOST:Syslog_Server} %{SYSLOGPROG}: %{IP:Client_IP}:%{INT:Client_Port} \[%{HAPROXYDATE:Accept_Date}\] %{NOTSPACE:Frontend_Name} %{NOTSPACE:Backend_Name}/%{NOTSPACE:Server_Name} %{INT:Time_Request}/%{INT:Time_Queue}/%{INT:Time_Backend_Connect}/%{INT:Time_Backend_Response}/\+%{NOTSPACE:Time_Duration} %{INT:Http_Status_Code} \+%{NOTSPACE:Bytes_Read} %{DATA:Captured_Request_Cookie} %{DATA:Captured_Response_Cookie} %{NOTSPACE:Termination_State} %{INT:Actconn}/%{INT:Feconn}/%{INT:Beconn}/%{INT:Srvconn}/%{NOTSPACE:Retries} %{INT:Srv_Queue}/%{INT:Backend_Queue} (\{%{IPORHOST:Site}\|?((%{IP:X_Forward_IP}|)(, |)(%{IP:X_Forward_IP2}|)(, |)(%{IP:X_Forward_IP3|)(%{DATA:X_Forward_Other}|))?\|?(%{URI:Http_Referer})?\|%{GREEDYDATA:User_Agent}\})?( )( )?\"(&lt;BADREQ&gt;|(%{WORD:Http_Method} (%{URIPROTO:Http_Proto}://)?(?:%{USER:Http_User}(?::[^@]*)?@)?(?:%{URIHOST:Http_Host})?(?:%{URIPATHPARAM:Http_Request})?( HTTP/%{NUMBER:Http_Version})?))?\""</code><code>]</code>

<code>      </code><code>}</code>

<code>    </code><code>useragent {</code>

<code>        </code><code>source</code> <code>=&gt; </code><code>"User_Agent"</code>

<code>        </code><code>target =&gt; </code><code>"ua"</code>

<code>    </code><code>if</code> <code>[X_Forward_IP] =~ </code><code>"."</code> <code>{</code>

<code>       </code><code>geoip {</code>

<code>        </code><code>source</code> <code>=&gt; [</code><code>"X_Forward_IP"</code><code>]</code>

<code>        </code><code>database =&gt; </code><code>"/usr/local/logstash2.2.2/bin/GeoLiteCity.dat"</code>

<code>    </code><code>} </code><code>else</code> <code>{</code>

<code>           </code><code>geoip {</code>

<code>                </code><code>source</code> <code>=&gt; [</code><code>"Client_IP"</code><code>]</code>

<code>                </code><code>database =&gt; </code><code>"/usr/local/logstash2.2.2/bin/GeoLiteCity.dat"</code>

<code>          </code><code>}</code>

<code>       </code><code>date</code><code>{</code>

<code>        </code><code>match =&gt; [</code><code>"Accept_Date"</code><code>, </code><code>"dd/MMM/yyyy:HH:mm:ss.SSS"</code> <code>]</code>

<code>       </code><code>}</code>

<code>       </code><code>mutate{</code>

<code>        </code><code>remove_field =&gt; [</code><code>"Syslog_Timestamp"</code><code>]</code>

<code>        </code><code>remove_field =&gt; [</code><code>"Accept_Date"</code><code>]</code>

<code>        </code><code>remove_field =&gt; [ </code><code>"Host"</code> <code>]</code>

<code>        </code><code>remove_field =&gt; [ </code><code>"Syslog_Server"</code> <code>]</code>

<code>        </code><code>remove_field =&gt; [ </code><code>"Path"</code> <code>]</code>

<code>        </code><code>remove_field =&gt; [ </code><code>"pid"</code> <code>]</code>

<code>        </code><code>remove_field =&gt; [ </code><code>"Client_Port"</code> <code>]</code>

<code>        </code><code>remove_field =&gt; [ </code><code>"program"</code> <code>]</code>

<code>        </code><code>remove_field =&gt; [ </code><code>"Haproxy_Monthday"</code> <code>]</code>

<code>        </code><code>remove_field =&gt; [ </code><code>"Haproxy_Month"</code> <code>]</code>

<code>        </code><code>remove_field =&gt; [ </code><code>"Haproxy_Year"</code> <code>]</code>

<code>        </code><code>remove_field =&gt; [ </code><code>"Haproxy_Hour"</code> <code>]</code>

<code>        </code><code>remove_field =&gt; [ </code><code>"Haproxy_Minute"</code> <code>]</code>

<code>        </code><code>remove_field =&gt; [ </code><code>"Haproxy_Second"</code> <code>]</code>

<code>        </code><code>remove_field =&gt; [ </code><code>"Haproxy_Milliseconds"</code> <code>]</code>

<code>        </code><code>remove_field =&gt; [ </code><code>"Frontend_Name"</code> <code>]</code>

<code>        </code><code>remove_field =&gt; [ </code><code>"Captured_Response_Cookie"</code> <code>]</code>

<code>        </code><code>remove_field =&gt; [ </code><code>"Captured_Request_Cookie"</code> <code>]</code>

<code>        </code><code>convert =&gt; [ </code><code>"Http_Status_Code"</code><code>,</code><code>"integer"</code> <code>]</code>

<code>        </code><code>convert =&gt; [ </code><code>"Bytes_Read"</code><code>,</code><code>"integer"</code> <code>]</code>

<code>        </code><code>convert =&gt; [ </code><code>"Time_Duration"</code><code>,</code><code>"integer"</code> <code>]</code>

<code>        </code><code>convert =&gt; [ </code><code>"Time_Backend_Response"</code><code>,</code><code>"integer"</code> <code>]</code>

<code>        </code><code>convert =&gt; [ </code><code>"Actconn"</code><code>,</code><code>"integer"</code> <code>]</code>

<code>        </code><code>convert =&gt; [ </code><code>"Feconn"</code><code>,</code><code>"integer"</code> <code>]</code>

<code>        </code><code>convert =&gt; [ </code><code>"Beconn"</code><code>,</code><code>"integer"</code> <code>]</code>

<code>        </code><code>convert =&gt; [ </code><code>"Srvconn"</code><code>,</code><code>"integer"</code> <code>]</code>

<code>        </code><code>convert =&gt; [ </code><code>"Retries"</code><code>,</code><code>"integer"</code> <code>]</code>

<code>        </code><code>convert =&gt; [ </code><code>"Srv_Queue"</code><code>,</code><code>"integer"</code> <code>]</code>

<code>        </code><code>convert =&gt; [ </code><code>"Backend_Queue"</code><code>,</code><code>"integer"</code> <code>]</code>

<code>        </code><code>convert =&gt; [ </code><code>"Time_Request"</code><code>,</code><code>"integer"</code> <code>]</code>

<code>        </code><code>convert =&gt; [ </code><code>"Time_Queue"</code><code>,</code><code>"integer"</code> <code>]</code>

<code>        </code><code>convert =&gt; [ </code><code>"Time_Backend_Connect"</code><code>,</code><code>"integer"</code> <code>]</code>

<code>    </code> 

<code>     </code><code>#stdout { codec =&gt; rubydebug }</code>

<code>        </code><code>elasticsearch {</code>

<code>                </code><code>hosts =&gt; </code><code>"192.168.2.240:9200"</code>

<code>                </code><code>index =&gt; </code><code>"logstash-haproxy-%{+YYYY.MM.dd}"</code>

本文轉自 rong341233 51CTO部落格,原文連結:http://blog.51cto.com/fengwan/1755489