美文网首页
开发logstash插件

开发logstash插件

作者: MakeSense | 来源:发表于2017-05-21 17:29 被阅读0次

    摘要:本文记录了我尝试开发logstash插件的愉(艰)快(辛)过程

    背景

    有很多大V的微博很有营养,比如agenzh的微博有很多关于技术方面的和程序员邹欣有很多关于软件工程的,值得反复玩味。但是微博是按timeline形式排列的,非常不方便非线性查看。agentzh的code2ebook给我启发,可不可以把感兴趣大V的微博做成电子书?

    规划

    首先想到的是写爬虫,然后模拟翻页操作,抓取全部微博。这种方式当然行得通,我也很熟练。刚好最近在看ELK,按照邹欣老师Build To Learn的原则,用ELK来收集分析也挺不错的,顺便练练手。logstash定期获取更新的微博,写入elasticsearch,除了可以导出生成电子书外,还可以在kibana做可视化分析。例如分析下大V们发微博的时间分布来分析下其作息习惯。根据词频来对大V进行分类,agenzh的openresty词频肯定很高。

    logstash input plugin

    logstash自带了很多input plugin,比如抓取twitter。但是没有微博的,想想自己能贡献一个微博的plugin还是挺激动的。于是开始学习怎么写input plugin。第一反应是模仿twitter这个插件写,首先使用下面的命令生成一份plugin模板。

    bin/logstash-plugin generate --type input --name weibo --path ~/elastic/plugins

    得到如下图的目录结构

    plugin目录结构

    可以看到weibo.rb是需要我们自己修改的。

    weibo.rb

    其中重点在run这个method中:

    1.创建一个event对象

    2.修饰event对象

    3.加入queue

    logstash的Excution Model解释说,input plugin跑在单独线程中,我们只需要往queue里插入event中就行了,至于如何发送到elasticsearch就不用管了。

    然而logstash-input-twitter的结构有点不一样。

    twitter.rb

    猜测有两个原因:

    第一,这是个streaming api,跟restful api不一样

    第二,这个plugin写得比较早,新版本推荐写法不一样。

    流程其实不复杂,所以也就不用参照了,直接自己写就是了。

    1.发送request抓取更新的微博

    2.根据抓取结果创建event对象

    3.插入queue

    到目前为止还是比较愉快的,接下来就有点闹心了。

    Weibo API

    抓取更新的微博有两种方法,第一就是爬虫,第二是通过微博官方的API。总是野路子不太好,所以决定尝试下通过官方的API抓取。然后我的噩梦就开始了,查看api文档,找到了以下api。

    weibo api

    恶心的地方就在需要登录授权,充分体现了微博是面向企业收费的网站,对个人开发者极其不友好,不提供(或者是我没找到)个人访问的token。看看github这个同性交友网站是多么的人性化,直接提供了个人访问的token。

    github personal token

    于是为了获得我自己的token。我还需要像开发第三方应用一样,使用另一个获取token的API。还好微博提供了SDK,可以直接拿来用。

    OAuth4Code

    本以为直接这样就能用了,结果还需要一个申请一个应用,填写AppKey和重定向url。

    Oauth2 API

    没开发过微博第三方应用,完全搞不懂这个重定向url是干什么的。于是我随手填了www.baidu.com,顺便申请了应用。

    微博应用 认证出错界面

    反复确认了几次之后,意识到可能是应用未审核的问题。到这个时候我真想放弃了,直接爬得了。可是沉没成本以及投入那么多了,还是继续吧。

    审核界面

    然后这个审核界面死活提交不了证件图片,我尝试了用Chrome,Firefox,IE都没成功。这时候我的内心是万马奔腾的。idea产生就在一瞬间,框架规划也没花多长时间,最后在这个微博API的使用上耗了一下午,还没搞定。虽然不太可能,还是呼吁下微博开放个人访问token。

    未完待续......

    相关文章

      网友评论

          本文标题: 开发logstash插件

          本文链接:https://www.haomeiwen.com/subject/kjjojttx.html