微服务日志打印。

转载于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实例汇总到一起即可。

ELK-6.5.3学习笔记–使用filebeat管理微服务日志的更多相关文章

  1. ELK学习笔记之filebeat合并多行日志示例

    0x00 概述 本节中的示例包括以下内容: 将Java堆栈跟踪日志组合成一个事件 将C风格的日志组合成一个事件 结合时间戳处理多行事件 同理,你可以把如下的正则应用在容器的yaml文件内. 0x01  ...

  2. Linux内核学习笔记-2.进程管理

    原创文章,转载请注明:Linux内核学习笔记-2.进程管理) By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...

  3. linux kernel学习笔记-5内存管理_转

    void * kmalloc(size_t size, gfp_t gfp_mask); kmalloc()第一个参数是要分配的块的大小,第一个参数为分配标志,用于控制kmalloc()的行为. km ...

  4. Linux学习笔记(五) 账号管理

    1.用户与组账号 用户账号:包括实际人员和逻辑性对象(例如应用程序执行特定工作的账号) 每一个用户账号包含一个唯一的用户 ID 和组 ID 标准用户是系统安装过程中自动创建的用户账号,其中除 root ...

  5. Linux学习笔记(六) 进程管理

    1.进程基础 当输入一个命令时,shell 会同时启动一个进程,这种任务与进程分离的方式是 Linux 系统上重要的概念 每个执行的任务都称为进程,在每个进程启动时,系统都会给它指定一个唯一的 ID, ...

  6. Qt学习笔记-Widget布局管理

    Qt学习笔记4-Widget布局管理       以<C++ GUI Programming with Qt 4, Second Edition>为参考 实例:查找对话框 包含三个文件,f ...

  7. XV6学习笔记(2) :内存管理

    XV6学习笔记(2) :内存管理 在学习笔记1中,完成了对于pc启动和加载的过程.目前已经可以开始在c语言代码中运行了,而当前已经开启了分页模式,不过是两个4mb的大的内存页,而没有开启小的内存页.接 ...

  8. 微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍

    微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍 一.为什么会有 API Gateway 网关 随着微服务架构的流行,很多公司把原有的单 ...

  9. ELK+Kafka学习笔记之FileBeat日志合并配置输出到kafka集群

    filebeat.prospectors: - type: log               #日志输出类型   enabled: true                             ...

随机推荐

  1. 在web-inf外面 使用的是绝对路径进行访问 “/”表示访问文件夹 一层一层方式 我们在windos下访问文件夹也是一层一层的访问

  2. codeforces158D

    Ice Sculptures CodeForces - 158D The Berland University is preparing to celebrate the 256-th anniver ...

  3. Nginx 4层反向代理

    L112 是基于TCP POST_ACCEPT阶段 在建立连接后所做的事情 PREACCESS阶段  limit_conn 限流 与HTTP类似 ACCESS阶段 类似HTTP模块用于控制访问权限 S ...

  4. AMS工作原理—— App启动概要

    说明: 1. 通过Launcher或者startActivity启动最终的流程都是和上面的一致的. 2. AMP是AMS在App端(client端)的代理, ATP是ApplicationThread ...

  5. ubuntu6.04安装

    一.在windows操作系统下准备ubuntu系统的安装盘 1. 下载ubuntu的ISO文件 这一步相对简单,网络上面有很多的链接下载.这里贴一个ubuntu的官方网站链接,可以下载到ubuntu ...

  6. url.openconnection() 设置超时时间

    System.setProperty("sun.net.client.defaultConnectTimeout", "30000"); System.setP ...

  7. P1508 Likecloud-吃、吃、吃

    数字金字塔3条路 f[i][j]=max(max(f[i-1][j],f[i-1][j-1]),f[i-1][j+1])+a[i][j]; #include<bits/stdc++.h> ...

  8. 洛谷P1063能量项链题解

    $题目$ 不得不说,最近我特别爱刷这种区间DP题,因为这个跟其他的DP有些不一样的地方,主要是有一定的套路,就是通过小区间的状态更新大区间,从而得到原题给定区间的最优解. $但是$ 这个题应该跟$石子 ...

  9. JavaWeb项目自动部署,持续集成

    来公司以后,学会两种JavaWeb项目,自动部署. 1.jenkins持续集成.自动化部署 (1)安装jenkins----------推荐nginx跳转方式,以域名方式 (2)nginx采用不同域名 ...

  10. 【HDU1848】Fibonacci again and again(博弈论)

    [HDU1848]Fibonacci again and again(博弈论) 题面 Hdu 你有三堆石子,每堆石子的个数是\(n,m,p\),你每次可以从一堆石子中取走斐波那契数列中一个元素等数量的 ...