zoukankan      html  css  js  c++  java
  • ELK-6.5.3学习笔记–使用filebeat管理微服务日志

    微服务日志打印。

    转载于http://www.eryajf.net/2369.html

    上边是输出了nginx日志,从而进行展示,以及各种绘图分析,而现在的需求是,要将微服务当中的日志汇总到elk当中以便开发查询日志定位问题。

    都知道,微服务第一个特点就是,多,不仅项目多,而且往往单台主机当中也会有多个应用,因此多个日志文件情况下,如何处理才更加快速便捷呢,这里使用了filebeat来作为日志转发组件。

    架构如图:

    1,配置filebeat。

    主机规划如下图简示:

    主机组件
    192.168.100.21 spring-cloud,filebeat-6.5.3
    192.168.100.21 spring-cloud,filebeat-6.5.3
    192.168.10.10 logstash-6.5.3,elk

    像刚刚那样,配置好yun源,然后直接安装。

    1. yum -y install filebeat

    然后来配置filebeat。

    1. cat > /etc/filebeat/filebeat.yml << EOF
    2. filebeat.inputs:
    3. - input_type: log
    4. paths:
    5. - /home/ishangjie/ishangjie-config-server/normal/*.log
    6. type: "wf1-config"
    7. fields:
    8. logsource: 192.168.100.21
    9. logtype: wf1-config
    10. - input_type: log
    11. paths:
    12. - /home/ishangjie/ishangjie-eureka-server/normal/*.log
    13. type: "wf1-eureka"
    14. fields:
    15. logsource: 192.168.100.21
    16. logtype: wf1-eureka
    17. - input_type: log
    18. paths:
    19. - /home/ishangjie/ishangjie-gateway-server/normal/*.log
    20. type: "wf1-gateway"
    21. fields:
    22. logsource: 192.168.100.21
    23. logtype: wf1-gateway
    24. output.logstash:
    25. hosts: ["192.168.10.10:5044"]
    26. EOF
    • 多个input定义多个应用日志路径,且可以用*.log进行匹配,默认读取目录下最新的日志。
    • 每个里边都定义一个type类型,从而便于上下文衔接。
    • 最后定义日志输出到elk的logstash的5044端口。

    再去配置一下另外一台主机。

    1. cat > /etc/filebeat/filebeat.yml << EOF
    2. filebeat.inputs:
    3. - input_type: log
    4. paths:
    5. - /home/ishangjie/ishangjie-activity-service/normal/*.log
    6. type: "wf5-activity"
    7. fields:
    8. logsource: 192.168.100.25
    9. logtype: wf5-activity
    10. - input_type: log
    11. paths:
    12. - /home/ishangjie/ishangjie-order-service/normal/*.log
    13. type: "wf5-order"
    14. fields:
    15. logsource: 192.168.100.25
    16. logtype: wf5-order
    17. - input_type: log
    18. paths:
    19. - /home/ishangjie/ishangjie-user-service/normal/*.log
    20. type: "wf5-user"
    21. fields:
    22. logsource: 192.168.100.25
    23. logtype: wf5-user
    24. - input_type: log
    25. paths:
    26. - /home/ishangjie/ishangjie-thirdparty-service/normal/*.log
    27. type: "wf5-thirdparty"
    28. fields:
    29. logsource: 192.168.100.25
    30. logtype: wf5-thirdparty
    31. output.logstash:
    32. hosts: ["192.168.10.10:5045"]
    33. EOF
    • 基本上配置与上边差不多,需要注意的一个地方就是output的logstash的端口,与上台主机不要一致,因为我们要启动多个实例进行管理的。

    启动filebeat。

    新版本配置实例

    filebeat.prospectors:
    - type: log
    paths:
    - /data/tomcat/tomcat1/logs/*.log
    fields:
    logsource: 172.18.45.88
    logtype: tomcatlog
    - type: log
    paths:
    - /var/log/secure
    fields:
    logsource: 172.18.45.80
    logtype: systemlog
    - type: log
    paths:
    - /data/log/nginx/t.log*
    fields:
    logsource: 172.18.45.99
    logtype: nginx_acclog
    - type: log
    paths:
    - /data/log/nginx/error_t.log*
    fields:
    logsource: 172.18.45.85
    logtype: nginx_errlog
    output.kafka:
    enabled: true
    hosts: ["172.18.45.76:9092","172.18.45.75:9092","172.18.45.88:9092"]
    topic: kafka_run_log

    -----------------------

    filebeat.prospectors:
    - input_type: log
    enabled: true
    paths:
    - /data/log/nginx/t.log*
    fields:
    log_topics: nginxlog
    json.keys_under_root: true
    json.overwrite_keys: true

    output.kafka:
    enabled: true
    hosts: ["172.18.45.79:9092","172.18.45.78:9092","172.18.45.80:9092"]
    topic: '%{[fields][log_topics]}'
    partition.round_robin:
    reachable_only: false
    compression: gzip
    max_message_bytes: 1000000
    required_acks: 1

    1. systemctl enable filebeat
    2. systemctl start filebeat
    3. systemctl status filebeat

    2,配置logstash。

    针对上边两个主机转过来的日志,在elk主机上添加相对应的配置进行接收。

    A:

    1. cat > /etc/logstash/conf.d/wf1.conf << EOF
    2. input {
    3. beats {
    4. port => "5044"
    5. host => "192.168.100.21"
    6. }
    7. }
    8. filter {
    9. if [fields][logtype] == "wf1-config" {
    10. json {
    11. source => "message"
    12. target => "data"
    13. }
    14. }
    15. if [fields][logtype] == "wf1-eureka" {
    16. json {
    17. source => "message"
    18. target => "data"
    19. }
    20. }
    21. if [fields][logtype] == "wf1-gateway" {
    22. json {
    23. source => "message"
    24. target => "data"
    25. }
    26. }
    27. }
    28. output {
    29. if [fields][logtype] == "wf1-config" {
    30. elasticsearch {
    31. hosts => ["127.0.0.1:9200"]
    32. index => "wf1-config-%{+YYYY.MM.dd}"
    33. }
    34. }
    35. if [fields][logtype] == "wf1-eureka" {
    36. elasticsearch {
    37. hosts => ["127.0.0.1:9200"]
    38. index => "wf1-eureka-%{+YYYY.MM.dd}"
    39. }
    40. }
    41. if [fields][logtype] == "wf1-gateway" {
    42. elasticsearch {
    43. hosts => ["127.0.0.1:9200"]
    44. index => "wf1-gateway-%{+YYYY.MM.dd}"
    45. }
    46. }
    47. }
    48. EOF

    B

    1. cat > /etc/logstash/conf.d/wf5.conf << EOF
    2. input {
    3. beats {
    4. port => 5052
    5. host => "192.168.100.25"
    6. }
    7. }
    8. filter {
    9. if [fields][logtype] == "wf5-activity" {
    10. json {
    11. source => "message"
    12. target => "data"
    13. }
    14. }
    15. if [fields][logtype] == "wf5-order" {
    16. json {
    17. source => "message"
    18. target => "data"
    19. }
    20. }
    21. if [fields][logtype] == "wf5-user" {
    22. json {
    23. source => "message"
    24. target => "data"
    25. }
    26. }
    27. if [fields][logtype] == "wf5-thirdparty" {
    28. json {
    29. source => "message"
    30. target => "data"
    31. }
    32. }
    33. }
    34. output {
    35. if [fields][logtype] == "wf5-activity" {
    36. elasticsearch {
    37. hosts => ["127.0.0.1:9200"]
    38. index => "wf5-activity-%{+YYYY.MM.dd}"
    39. }
    40. }
    41. if [fields][logtype] == "wf5-order" {
    42. elasticsearch {
    43. hosts => ["127.0.0.1:9200"]
    44. index => "wf5-order-%{+YYYY.MM.dd}"
    45. }
    46. }
    47. if [fields][logtype] == "wf5-user" {
    48. elasticsearch {
    49. hosts => ["127.0.0.1:9200"]
    50. index => "wf5-user-%{+YYYY.MM.dd}"
    51. }
    52. }
    53. if [fields][logtype] == "wf5-thirdparty" {
    54. elasticsearch {
    55. hosts => ["127.0.0.1:9200"]
    56. index => "wf5-thirdparty-%{+YYYY.MM.dd}"
    57. }
    58. }
    59. }
    60. EOF
    • 这里通过端口作为豁口,让彼此成为连接,注意要一一对应。
    • 照单全收日志,然后转手发给本机的es同学。

    启动这两个实例。

    1. nohup /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/wf1.conf --path.data=/usr/share/logstash/data5 &> /logs/logstash_nohup/wf1.out &
    2. nohup /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/wf5.conf --path.data=/usr/share/logstash/data9 &> /logs/logstash_nohup/wf5.out &

    启动之后可以按上边演示过的步骤,在kibana当中添加索引,然后查看日志。

    3,合理规划。

    • 关于索引。
      • 上边的方式是一个服务配置了一个索引,众所周知,微服务第一大特点就是多,两个环境下来,发现按这种方式分配索引的话,会导致es里边集聚很多的索引。这是其一。
    • 关于端口。
      • 按上边的思路,基本上是外部的一台主机,就对应启动了一个端口,这样很容易端口浪费,所以可以进行一下合理规划与配置。
    • 解决上边两个问题。
      • 索引的话,我这边规划的是一台主机一个索引,而非一个服务一个索引。如此算下来,可以从原来二三十个索引缩减到十个以内。当然还可以从其他维度来进行区分。具体操作的办法非常简单,那就是在配置logstash实例的时候,在output处索引归拢即可。
      • 端口方面,我的规划是一类环境公用一个端口,原来预发线上一共十台服务用了十个端口,现在预发用一个,线上用一个。具体操作就是filebeat客户端端口统一,然后logstash实例汇总到一起即可。
  • 相关阅读:
    FaceBook API
    CAP – Consistency, Availability, Partition Tolerance
    Hypothesis Testing
    MOSS 2007中如何添加VariationsLabelMenu来在不同语言的variation间切换?
    用Windows 2008 R2做工作机遇到的IE的安全问题
    如何使用Notepad++快速整理挤在一起的CallStack信息(将换行符作为被替换的内容)
    Managed Metadata Service介绍系列 之四
    MOSS 2007捞取ConfigDB中的数据, 得到内部名所对应的timer job的title及运行状况
    Log Parser分析IIS log的举例
    EventCache表太大, 怎么办?
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/10755952.html
Copyright © 2011-2022 走看看