devops 日志处理

elk:elasticsearch kibana l是啥鬼??logstash

一个可落地的日志处理系统?ELK or 其他????

ELK的模式?

问题:各种工具在日志系统中起到什么作用???

 

日志处理的架构:

即 收集日志(flume,fluentd,logstash这些)+消息队列(kafka)+日志处理(elastic search+kibana,splunk)+其他日志处理(比如向其他服务提供log数据等),再加上日志存储(NFS(网络文件系统))

 

几大处理方案:

1.flume+kafka+splunk

2.elk+kafka

最佳实践经验:数据收集和转化的环节,建议使用flume+kafka的配合,为啥?因为flume可以以数据流向haddop发送,kafka的缓存比flume的专业,且有自己的分布式存储,各有所长。

对比:

https://blog.51cto.com/splunkchina/1948105

https://blog.csdn.net/gyshun/article/details/79710534

 

首先要在服务器上收集日志,然后把日志传送给需要的服务,比如用户行为分析服务,比如日志v存储服务,比如日志分析等。基于这些服务,还要考虑中间会不会阻塞导致的数据丢失,于是便有了消息队列(kafka,redis等)

 

splunk:一个和elk 作为同款PK的日志处理平台,https://blog.51cto.com/splunkchina/1948105

kafka:apache公司的,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,服务器端的日志收集工具(比如logstash或者flume等)要配置kafka,接收端也要配置kafka,相当于一个中转站,接受来自于收集工具的日志,缓存并发给下游,这么做的意义?它是一个流处理平台

logstash:装于服务器上,监控,过滤并收集日志(同时在服务器上安装logstash agent并在elk机器上安装logstash index接收)

elastic search:对搜索的日志处理,存储

kibana:日志显示及图形化处理

flume:apache公司的,装于服务器,用于日志收集,外发,功能同logstash

fluentd: 同flume,但不是apache的

elastic search

logging driver

file base????

Prometheus

syslog  开源,可以把各服务器日志收集在一起。

 

flume VS fluentd: https://www.slant.co/versus/959/960/~fluentd_vs_flume   

资源 :https://www.fluentd.org/       

 

日志收集系统  

 

关于elk  https://www.cnblogs.com/JetpropelledSnake/p/9893566.html  

关于elk+kafka  :https://www.cnblogs.com/JetpropelledSnake/p/10057545.html

关于kafka:

https://www.cnblogs.com/likehua/p/3999538.html

https://www.cnblogs.com/likehua/p/3999538.html

 

第一个问题,日志处理系统的逻辑和流程:

https://mp.weixin.qq.com/s?__biz=MzAwNTM5Njk3Mw==&mid=2247486414&idx=1&sn=4f3cf7506414d46a0cc436d4ae47755f&chksm=9b1c0b4cac6b825a05c1745aa649fc33b61fc4caaaf262a3577c01821ccbbc128d076477cb3e&scene=27#wechat_redirect

https://www.zcfy.cc/article/5-devops-tools-for-logging-and-monitoring

https://www.ibm.com/developerworks/cn/analytics/library/ba-1512-elkstack-logprocessing/index.html

日志层级:系统日志、应用程序日志和安全日志。首先是日志收集(工具有:),收集后日志要进行统计和检索(工具有:)

流程:

  1. 容器日志实时采集;

  2. 查询分析和可视化;

  3. 日志上下文分析;

  4. LiveTail - 云上 tail -f。

ELK的日志处理方案:

首先在要收集日志的服务器上安装logstash,作为一个agent开始收集日志

 

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

kafka: apache公司的,一种把日志处理成流的工具,有缓存机制可以临时存储这些log,还可以把日志分类,比如tomcat的,db的,等等。它叫topic。https://blog.csdn.net/lingbo229/article/details/80761778

kafka的真正作用,同一条消息可能被多个应用消费或使用,不能让每个消费或应用都去访问消息产生的服务,这就要有一个中介,按照topic收集消息,当其他服务需要这些消失时,再主动提供这些消息。这仅仅是基础,解决了多次重复访问占用性能的问题,在此基础上,它还有一大堆的优点,谁用谁知道,redis跟它比可能是一个小插件的意思https://www.zhihu.com/question/53331259

Apache kafka是消息中间件的一种,我发现很多人不知道消息中间件是什么,在开始学习之前,我这边就先简单的解释一下什么是消息中间件,只是粗略的讲解,目前kafka已经可以做更多的事情。

举个例子,生产者消费者,生产者生产鸡蛋,消费者消费鸡蛋,生产者生产一个鸡蛋,消费者就消费一个鸡蛋,假设消费者消费鸡蛋的时候噎住了(系统宕机了),生产者还在生产鸡蛋,那新生产的鸡蛋就丢失了。再比如生产者很强劲(大交易量的情况),生产者1秒钟生产100个鸡蛋,消费者1秒钟只能吃50个鸡蛋,那要不了一会,消费者就吃不消了(消息堵塞,最终导致系统超时),消费者拒绝再吃了,”鸡蛋“又丢失了,这个时候我们放个篮子在它们中间,生产出来的鸡蛋都放到篮子里,消费者去篮子里拿鸡蛋,这样鸡蛋就不会丢失了,都在篮子里,而这个篮子就是”kafka“。
鸡蛋其实就是“数据流”,系统之间的交互都是通过“数据流”来传输的(就是tcp、http什么的),也称为报文,也叫“消息”。
消息队列满了,其实就是篮子满了,”鸡蛋“ 放不下了,那赶紧多放几个篮子,其实就是kafka的扩容。
各位现在知道kafka是干什么的了吧,它就是那个"篮子"



作者:极限求知者
链接:https://www.zhihu.com/question/53331259/answer/241614605
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

- 日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。

- 消息系统:解耦和生产者和消费者、缓存消息等。

- 用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。

- 运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。

- 流式处理:比如spark streaming和storm

- 事件源

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

flume:

https://blog.csdn.net/gyshun/article/details/79710534

flume也有kafka的缓存功能,但是有差异,请看文档

flume的使用方式:在服务器上装一个flume agent用于搜集,也叫数据采集器。再在别的server上搭一个flume collector

flume agent里又有 source,channel,sink三组件。source是收,channel是短暂存储,sink是传。可以传给存储,也可以传给下一个agent。

https://www.cnblogs.com/oubo/archive/2012/05/25/2517751.html

flume agent 和flume collector的关系和区别 totally have no idea。新的flume已经没有collector的概念了貌似,

为什么用flume?因为flume的数据处理和很多封装的source和sink,且flume可以处理很大的数据量,即专门为大数据设计

Flume does have some features that makes it attractive to be a data ingestion and simpleevent processing framework. The key benefit of Flume is that it supports many built-in sources and sinks, which you can use out of box. If you use Kafka, most likely you have to write your own producer and consumer. Of course, as Kakfa becomes more and more popular, other frameworks are constantly adding integration support for Kafka. For example, Apache Storm added Kafka Spout in release 0.9.2, allowing Storm topology to consume data from Kafka 0.8.x directly. 

Kafka does not provider native support for message processing. So mostly likely it needs to integrate with other event processing frameworks such as Apache Storm to complete the job. In contrast, Flume supports different data flow models and interceptors chaining, which makes event filtering and transforming very easy. For example, you can filter out messages that you are not interested in the pipeline first before sending it through the network for obvious performance reason. However, It is not suitable for complex event processing, which I will address in a future post. 

 

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

fluentd:  与flume的区别:Fluentd is easier to install and maintain and has better documentation and support than Flume and Scribe 

fluent教程

https://docs.fluentd.org/installation/install-by-rpm

采用JSON统一数据/日志格式是它的另一个特点。相对去Flumed,配置也相对简单一些

搭建fluentd:前期准备(并没有准备),执行脚本安装(curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | sh),启动daemon(/usr/lib/systemd/system/td-agent,必须成功),开放端口8888(参见linux基本命令之端口处理,centos7),执行测试命令: curl -X POST -d 'json={"json":"message"}' http://192.168.153.132:8888/debug.test。发现已经追加到日志文件的末尾(/var/log/td-agent/td-agent.log),要修改配置在哪里改?在这里/etc/td-agent/td-agent.conf

主要用法就是:安装,启动daemon,然后设置配置文件(/etc/td-agent/td-agent.conf),然后测试(运行监听的程序)

》》》》》》》》》》》》》》》》》》》》》》》

flume语法(https://flume.apache.org/releases/content/1.9.0/FlumeUserGuide.html):

先定义一个config文件,在启动flume的时候可以调用这个配置文件,比如:

bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console 其中example.conf就是要使用的 配置文件。

里面的语法格式:首先定义都有哪些channel,source,和sink,其中多个时可以放在一起,用空格隔开,比如

agent.channel =  xx xxx  xxxx xyxyxy …… 其中的“agent”就是个别名,用于在命令行里调用,比如上面的a1

定义好三大件后开始单独配置,语法如下:

agent.channel.xx.type = xxx

原理就是类似于成员变量赋值。

一次赋值参数给 source和sink,有很多参数可配置。可以引入环境变量,比如 ${xxxx}

 

具体的参数以及值:

比如sink里的type的Avro,这个是个专业术语 ,是一种数据结构,中文名数据序列化系统(https://www.cnblogs.com/Henry-pan/p/7242584.html),典型的基于json的数据结构。便于交互

checkpoint 和datadirs:其中datadirs是日志存储位置(可以是多个的之间用逗号隔开),checkpoint是啥鬼??该磁盘上的检查点,定期进行备份的,防止flume崩了后找不到之前的日志

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

fluentd的语法(https://docs.fluentd.org/configuration/config-file):

配置文件,固定,往里面不停的扔管道,重要参数是source和match。替代flume的source和sink的原理

 

 

》》》》》》》》》》》》》

两种实现方式:

方式一:线路一:flume收集日志,发送给flume collector,collector发给splunk。线路二:kafka直接从tomcat拿日志,然后扔给elasticsearch后续处理。

方式二:fluentd直接收集

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章