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源,然后直接安装。
yum -y install filebeat
然后来配置filebeat。
cat > /etc/filebeat/filebeat.yml << EOFfilebeat.inputs:- input_type: logpaths:- /home/ishangjie/ishangjie-config-server/normal/*.logtype: "wf1-config"fields:logsource: 192.168.100.21logtype: wf1-config- input_type: logpaths:- /home/ishangjie/ishangjie-eureka-server/normal/*.logtype: "wf1-eureka"fields:logsource: 192.168.100.21logtype: wf1-eureka- input_type: logpaths:- /home/ishangjie/ishangjie-gateway-server/normal/*.logtype: "wf1-gateway"fields:logsource: 192.168.100.21logtype: wf1-gatewayoutput.logstash:hosts: ["192.168.10.10:5044"]EOF
- 多个input定义多个应用日志路径,且可以用*.log进行匹配,默认读取目录下最新的日志。
- 每个里边都定义一个type类型,从而便于上下文衔接。
- 最后定义日志输出到elk的logstash的5044端口。
再去配置一下另外一台主机。
cat > /etc/filebeat/filebeat.yml << EOFfilebeat.inputs:- input_type: logpaths:- /home/ishangjie/ishangjie-activity-service/normal/*.logtype: "wf5-activity"fields:logsource: 192.168.100.25logtype: wf5-activity- input_type: logpaths:- /home/ishangjie/ishangjie-order-service/normal/*.logtype: "wf5-order"fields:logsource: 192.168.100.25logtype: wf5-order- input_type: logpaths:- /home/ishangjie/ishangjie-user-service/normal/*.logtype: "wf5-user"fields:logsource: 192.168.100.25logtype: wf5-user- input_type: logpaths:- /home/ishangjie/ishangjie-thirdparty-service/normal/*.logtype: "wf5-thirdparty"fields:logsource: 192.168.100.25logtype: wf5-thirdpartyoutput.logstash:hosts: ["192.168.10.10:5045"]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
systemctl enable filebeatsystemctl start filebeatsystemctl status filebeat
2,配置logstash。
针对上边两个主机转过来的日志,在elk主机上添加相对应的配置进行接收。
A:
cat > /etc/logstash/conf.d/wf1.conf << EOFinput {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 << EOFinput {beats {port => 5052host => "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实例汇总到一起即可。
ELK-6.5.3学习笔记–使用filebeat管理微服务日志的更多相关文章
- ELK学习笔记之filebeat合并多行日志示例
0x00 概述 本节中的示例包括以下内容: 将Java堆栈跟踪日志组合成一个事件 将C风格的日志组合成一个事件 结合时间戳处理多行事件 同理,你可以把如下的正则应用在容器的yaml文件内. 0x01 ...
- Linux内核学习笔记-2.进程管理
原创文章,转载请注明:Linux内核学习笔记-2.进程管理) By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...
- linux kernel学习笔记-5内存管理_转
void * kmalloc(size_t size, gfp_t gfp_mask); kmalloc()第一个参数是要分配的块的大小,第一个参数为分配标志,用于控制kmalloc()的行为. km ...
- Linux学习笔记(五) 账号管理
1.用户与组账号 用户账号:包括实际人员和逻辑性对象(例如应用程序执行特定工作的账号) 每一个用户账号包含一个唯一的用户 ID 和组 ID 标准用户是系统安装过程中自动创建的用户账号,其中除 root ...
- Linux学习笔记(六) 进程管理
1.进程基础 当输入一个命令时,shell 会同时启动一个进程,这种任务与进程分离的方式是 Linux 系统上重要的概念 每个执行的任务都称为进程,在每个进程启动时,系统都会给它指定一个唯一的 ID, ...
- Qt学习笔记-Widget布局管理
Qt学习笔记4-Widget布局管理 以<C++ GUI Programming with Qt 4, Second Edition>为参考 实例:查找对话框 包含三个文件,f ...
- XV6学习笔记(2) :内存管理
XV6学习笔记(2) :内存管理 在学习笔记1中,完成了对于pc启动和加载的过程.目前已经可以开始在c语言代码中运行了,而当前已经开启了分页模式,不过是两个4mb的大的内存页,而没有开启小的内存页.接 ...
- 微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍
微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍 一.为什么会有 API Gateway 网关 随着微服务架构的流行,很多公司把原有的单 ...
- ELK+Kafka学习笔记之FileBeat日志合并配置输出到kafka集群
filebeat.prospectors: - type: log #日志输出类型 enabled: true ...
随机推荐
- undefined reference to `cv::VideoCapture
出现opencv链接的问题原因: 1. 路径设置不正确,caffe会优先搜索Makefile.config里面的环境设置 2. anaconda2装的opencv和配置的opencv路径不一致 比如, ...
- Zero to Build: Create new Xamarin apps in minutes with AppMap
Creating a new Xamarin.Forms app can be an intimidating task, especially if you add in content pages ...
- 搭建Hexo博客(三)—换电脑继续写Hexo博客
Hexo和GitHub搭建博客的原理是:Hexo将source下的md文件生成静态的html页面,存放到public目录中,这一步是由命令:hexo -g完成.接下来执行hexo -d命令,就将pub ...
- Android系统启动概要
注:Java系统服务与本地系统服务标注反了 1.Linux内核 Android系统启动时,首先通过BootLoader(系统加载器)加载Linux内核,在Linux加载启动时,首先初始化内核,再调用i ...
- JQ用法
jQuery简称jq,是一款同prototype一样优秀js开发库类,特别是对css和XPath的支持,使我们写js变得更加方便!如果你不是个js高手又想写出优 秀的js效果,jq可以帮你达到目的!下 ...
- POJ 3020 -Antenna Placement-二分图匹配
题意:一个N*M的矩阵里有K个观测点,你必须放置天线覆盖所有观测点.每个雷达只能天线两个观测点,这两点必须相邻.计算最少天线数. 做法:将所有相邻的观测点连起来,建图.跑一遍匈牙利算法就计算出了最大的 ...
- 【XSY2190】Alice and Bob VI 树形DP 树剖
题目描述 Alice和Bob正在一棵树上玩游戏.这棵树有\(n\)个结点,编号由\(1\)到\(n\).他们一共玩\(q\)盘游戏. 在第\(i\)局游戏中,Alice从结点\(a_i\)出发,Bob ...
- Ionic的页面堆栈与Tabs菜单相遇的问题(页面堆栈有多个)
本来的需求: 新建的Ionic项目是Tabs菜单,假设有两个选项卡 A 和 B(从左到右),对应的两个页面的代码完全一样,使用了echarts 插件,并且使用了一个获取页面元素的方法,给自己的一个变量 ...
- MT【285】含参数函数绝对值的最大值
(浙江2013高考压轴题)已知$a\in R$,函数$f(x)=x^3-3x^2+3ax-3a+3$(2)当$x\in[0,2]$时,求$|f(x)|$的最大值. 分析:由题意$f^{'}(x)=3x ...
- Mysql 数据备份导出
mysqldump导出整个数据库mysqldump --single-transaction --skip-lock-tables -uDBUSER -pDBPASSWD -hDBIP \--defa ...