使用 ELK 来可视化微信群聊记录

2017-06-23 00:16:05 +08:00
 gyorou

原文 偷懒省略了一些细节。有争议再解释讨论吧。

自从有了 itchat 这个神器之后,一直在考虑能做些什么东西。 先后做了发送撤回消息的 bot 和推荐 spotify 音乐的 bot,到头来,所有的聊天记录都静静地躺在我的 redis 里面,需要利用起来也十分麻烦。 于是最近,我突然想到,既然 ELK 能用来可视化 log,那何尝不能用来可视化一下微信的聊天记录呢。

需要的东西

  1. ELK 全家桶。

  2. Redis,用来通过在 itchat 中 pub,在 logstash 中 sub 来获取微信聊天内容。

  3. Itchat。基于 web 微信的第三方 SDK。

Step by Step

首先自然需要写个 Itchat 的脚本来获取群消息。例子看文档已经足够。

接下来假设我们获取到一个类似

message = {"msg_from": "gyorou", "msg_content": "fuck the world"}

的消息内容。我们需要把 message 传递给 logstash,再由 logstash 写入 elasticsearch。

我想到的方法是使用 Redis 的 pubsub 方法。

先把 message dump 成 string 的形式,交给 redis publish 出去。

import json
import redis
import itchat

# 省略
redis = redis.client(...)
message = json.dumps(message)
redis.publish('wechat_message', message)

为了接收 publish 的 message,logstash 应该有如下的输入配置。

input {
  redis {
    data_type => "channel"
    codec => "json"
    key => "wechat_message"
  }
}

注意点是需要codec => "json"这一项,因为,我们 publish 的是一个 string,我们要需要将其按照 json 的格式解析出来>里面的内容。

接下来,配置 logstash 的输出。

output {
  elasticsearch {
    index => "from_my_wechat"
    doucument_type => "chatlog"
  }
}

以上两项分别对应 elasticsearch 的 index 和 type。这样我们可以通过localhost:9200/from_my_wechat/chatlog的形式访 问和操作被索引的聊天内容。

最后打开 kibana,把我们的索引项目称from_my_wechat填进去就大功告成了。 随便点开图标一览,画两个图呗,比如统计一下谁特么发言最多这种。

To do

以上。

5906 次点击
所在节点    分享创造
15 条回复
ke1e
2017-06-23 00:35:10 +08:00
推荐 index 使用 time based 命名,只是推荐
xujialiang
2017-06-23 00:51:40 +08:00
嗯。。。我是用 Docker 跑的,然后 elk 是记录 Docker 的日志,这样全都有了。。自己在 kibana 上做 filter
SharkIng
2017-06-23 07:43:42 +08:00
有没有可能不用 Redis ?
gyorou
2017-06-23 08:09:01 +08:00
@ke1e 这个是之前写的,现在用了微信的 messeage id 命名,每次取消的时候找出相同的 message 还可以标注一下改 message 已经取消这种。
gyorou
2017-06-23 08:10:03 +08:00
@SharkIng 可以直接调用 Elasticsearch 的 API。
misaka19000
2017-06-23 08:41:40 +08:00
这个数据量有点小吧。。
crayygy
2017-06-23 08:52:22 +08:00
挺有兴趣的,改天研究一下 hhh 多谢
SharkIng
2017-06-23 09:35:30 +08:00
@gyorou #5 好的,谢谢,这样省不少资源。而且也许 logstash 也可以不用,等有空试试看。
gyorou
2017-06-23 09:46:06 +08:00
@SharkIng logstash 的话可以整理过滤一些东西,还是挺有用的。
@misaka19000 建小号狂加几百个群就多了。
SharkIng
2017-06-23 09:53:59 +08:00
@gyorou #9 主要 logstash 也是占资源的,Elasticsearch 已经很占资源了.. 小搞一下玩玩也不想花太多钱
(我可能是被我司的 ELK 的开销吓到了,哈哈)
hienchu
2017-06-23 13:04:30 +08:00
@SharkIng ES 数据量上来以后,资源占用还是可以接收的,数据量太小就有点浪费
sumuu
2017-06-23 15:47:06 +08:00
@SharkIng
可以用 Filebeat 代替掉 Logstash ,资源占用会减缓.
aksoft
2017-06-24 09:26:38 +08:00
微信聊天记录?
bingchengcool
2017-06-27 11:00:45 +08:00
能否通过分词词性分析,找出热门话题~
gyorou
2017-06-27 19:34:36 +08:00
@bingchengcool 那当然是可以的了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/370442

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX