• 对于注定会优秀的人来说,他所需要的,只是时间----博主
  • 手懒得,必受贫穷,手勤的,必得富足----《圣经》
  • 帮助别人,成就自己。愿君在本站能真正有所收获!
  • 如果你在本站中发现任何问题,欢迎留言指正!
  • 宝剑锋从磨砺出,梅花香自苦寒来!
  • 本站开启了防爆破关小黑屋机制,如果您是正常登录但被关进小黑屋,请联系站长解除!

<四>ELK-6.5.3学习笔记–使用filebeat管理微服务日志

ELK eryajf 10个月前 (01-05) 1699°C 已收录 2个评论
本文预计阅读时间 14 分钟

微服务日志打印。

上边是输出了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源,然后直接安装。

yum -y install filebeat

然后来配置filebeat。

cat > /etc/filebeat/filebeat.yml << EOF
filebeat.inputs:
- input_type: log
  paths:
    - /home/ishangjie/ishangjie-config-server/normal/*.log
  type: "wf1-config"
  fields:
    logsource: 192.168.100.21
    logtype: wf1-config
- input_type: log
  paths:
    - /home/ishangjie/ishangjie-eureka-server/normal/*.log
  type: "wf1-eureka"
  fields:
    logsource: 192.168.100.21
    logtype: wf1-eureka
- input_type: log
  paths:
    - /home/ishangjie/ishangjie-gateway-server/normal/*.log
  type: "wf1-gateway"
  fields:
    logsource: 192.168.100.21
    logtype: wf1-gateway
output.logstash:
  hosts: ["192.168.10.10:5044"]
EOF
  • 多个input定义多个应用日志路径,且可以用*.log进行匹配,默认读取目录下最新的日志。
  • 每个里边都定义一个type类型,从而便于上下文衔接。
  • 最后定义日志输出到elk的logstash的5044端口。

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

cat > /etc/filebeat/filebeat.yml << EOF
filebeat.inputs:
- input_type: log
  paths:
    - /home/ishangjie/ishangjie-activity-service/normal/*.log
  type: "wf5-activity"
  fields:
    logsource: 192.168.100.25
    logtype: wf5-activity
- input_type: log
  paths:
    - /home/ishangjie/ishangjie-order-service/normal/*.log
  type: "wf5-order"
  fields:
    logsource: 192.168.100.25
    logtype: wf5-order
- input_type: log
  paths:
    - /home/ishangjie/ishangjie-user-service/normal/*.log
  type: "wf5-user"
  fields:
    logsource: 192.168.100.25
    logtype: wf5-user
- input_type: log
  paths:
    - /home/ishangjie/ishangjie-thirdparty-service/normal/*.log
  type: "wf5-thirdparty"
  fields:
    logsource: 192.168.100.25
    logtype: wf5-thirdparty
output.logstash:
  hosts: ["192.168.10.10:5045"]
EOF
  • 基本上配置与上边差不多,需要注意的一个地方就是output的logstash的端口,与上台主机不要一致,因为我们要启动多个实例进行管理的。

启动filebeat。

systemctl enable filebeat
systemctl start filebeat
systemctl status filebeat

2,配置logstash。

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

A:

cat > /etc/logstash/conf.d/wf1.conf << EOF
input {
 beats {
   port => "5044"
   host => "192.168.100.21"
  }
}
filter {
  if [fields][logtype] == "wf1-config" {
      json {
      source => "message"
      target => "data"
    }
  }
  if [fields][logtype] == "wf1-eureka" {
    json {
      source => "message"
      target => "data"
    }
  }
  if [fields][logtype] == "wf1-gateway" {
    json {
      source => "message"
      target => "data"
    }
  }
}
output {
  if [fields][logtype] == "wf1-config" {
    elasticsearch {
      hosts => ["127.0.0.1:9200"]
      index => "wf1-config-%{+YYYY.MM.dd}"
    }
  }
  if [fields][logtype] == "wf1-eureka" {
    elasticsearch {
      hosts => ["127.0.0.1:9200"]
      index => "wf1-eureka-%{+YYYY.MM.dd}"
    }
  }
  if [fields][logtype] == "wf1-gateway" {
    elasticsearch {
      hosts => ["127.0.0.1:9200"]
      index => "wf1-gateway-%{+YYYY.MM.dd}"
    }
  }
}
EOF

B

cat > /etc/logstash/conf.d/wf5.conf << EOF
input {
 beats {
   port => 5052
   host => "192.168.100.25"
  }
}
filter {
  if [fields][logtype] == "wf5-activity" {
      json {
      source => "message"
      target => "data"
    }
  }
  if [fields][logtype] == "wf5-order" {
    json {
      source => "message"
      target => "data"
    }
  }
  if [fields][logtype] == "wf5-user" {
    json {
      source => "message"
      target => "data"
    }
  }
  if [fields][logtype] == "wf5-thirdparty" {
    json {
      source => "message"
      target => "data"
    }
  }
}
output {
  if [fields][logtype] == "wf5-activity" {
    elasticsearch {
      hosts => ["127.0.0.1:9200"]
      index => "wf5-activity-%{+YYYY.MM.dd}"
    }
  }
  if [fields][logtype] == "wf5-order" {
    elasticsearch {
      hosts => ["127.0.0.1:9200"]
      index => "wf5-order-%{+YYYY.MM.dd}"
    }
  }
  if [fields][logtype] == "wf5-user" {
    elasticsearch {
      hosts => ["127.0.0.1:9200"]
      index => "wf5-user-%{+YYYY.MM.dd}"
    }
  }
  if [fields][logtype] == "wf5-thirdparty" {
    elasticsearch {
      hosts => ["127.0.0.1:9200"]
      index => "wf5-thirdparty-%{+YYYY.MM.dd}"
    }
  }
}
EOF
  • 这里通过端口作为豁口,让彼此成为连接,注意要一一对应。
  • 照单全收日志,然后转手发给本机的es同学。

启动这两个实例。

nohup /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/wf1.conf --path.data=/usr/share/logstash/data5 &> /logs/logstash_nohup/wf1.out &
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实例汇总到一起即可。

weinxin
扫码订阅本站,第一时间获得更新
微信扫描二维码,订阅我们网站的动态,另外不定时发送WordPress小技巧,你可以随时退订,欢迎订阅哦~

二丫讲梵 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明<四>ELK-6.5.3学习笔记–使用filebeat管理微服务日志
喜欢 (1)
[如果想支持本站,可支付宝赞助]
分享 (0)
eryajf
关于作者:
学无止境,我愿意无止境学。书山有路,我愿意举身投火,淬炼成金!

您必须 登录 才能发表评论!

(2)个小伙伴在吐槽
  1. pengge
    优秀的龍哥 :oops: :oops: logtype: wf5-order输入: if [fields][logtype] == "wf5-order"输出: index => "wf5-order-%{+YYYY.MM.dd}"以此来进行不同的索引名称的命名区分对吧
    鹏哥2019-01-07 13:15 Windows 10 | Chrome 70.0.3538.110
    • eryajf
      是的,你可以测试一下,马上就见分晓
      eryajf2019-01-07 13:46 Windows 7 | Chrome 70.0.3538.9