Elasticsearch 跟 VC(venture capital)

在 IT 行业,想开个公司做大做好最后大家都能吃香喝辣,基本是离不开幕后的 VC,不管是国外的 Google、Facebook、Twitter,还是国内的 Baidu、人人、微博,包括我司在内的,统统离不开这帮干爹。不仅仅是 IT/TMT 行业,连北京满大街的粥店火锅店卖鸡蛋的开房的都会有 VC 的帮助。
总之,VC 的产生总的来看是一件好事,你愿意出钱我愿意烧钱,大家做的都是心甘情愿,赢了大家按协议分钱退出;输了优先清算点东西,也图不到个什么。除非 founder 都是不缺钱的土壕(canonical 的 CEO),一般的创业者还是离不开 VC 的。
之前在火车上把桂曙光老师写的《创业之初你不可不知的融资知识》看了两遍,对VC/LP/GP/Option/Term sheet 等这些概念有了个大致的了解,再加上本身对 IT 跟 VC 这两个方向都比较感兴趣,而且这两者基本可以说是臭气相投,谁也离不开谁(相比 TMT,VC 基本不会投资芯片、新药研发这类项目,因为前者更加的来钱来的快,更容易 copy),平时也比较关注这方面的动态。

下面进入正题,Elasticsearch,主要说说 ES 跟 VC 的关系。

对于一款开源的产品,我了解的大部分运作模式基本有下列几种:

  1. 如果是从公司诞生的,比如像 linkedin 开源的 kafka,Twitter 开源的 twemproxy 等等,这类自然不用担心"销路"问题,这类产品都是有专职的工程师去开发,说白了,就是公司花钱雇这帮人来专门的维护开源产品。如果发展的不错,还能被 Apache 基金会纳为顶级开源项目,比如上面提到的 Kafka,这个对公司绝对是一种莫大的荣誉,就像如果你是一名 ASF 的 committers,同样是一个非常大的荣誉。
  2. 更多的是像下面描述的那样。很多时候纯粹是个人不满于现状,于是开发了一个更好用的工具,然后在 github 上开源出来了,然后世界上对现状不满意的人还蛮多的,那些人发现了这个项目之后,认为这是个非常好的东西,确实能够解决自身的需求。于是本着  don't reinvent the wheel 的原则,大家就一起来贡献代码了,然后,然后就越来越火了。不过这类模式有个问题就是,很多都是凭作者的兴趣爱好感觉来走,他们的专职工作并不在此,如果这个项目很火,有很多人贡献代码还好,如果这个项目不是很火,可能适用的领域很狭窄,可能最活跃的贡献者就是原作者本人,如果哪天作者说迫于生计不想再继续了,或者没时间了,或者没兴趣了,这个项目基本就死了。这个也是目前 Linux 下大多数软件工具产生的方式。看看那些项目主页出现的 "donate me" 就知道了。
  3. 最后一种也是最近几年比较火的方式,找 VC。虽然之前也有,但是一直都比较的低调,最著名的就是 RedHat 了,早在 97 年的时候,Cygnus Solutions(99 年被 RedHat 收购) 就接受了第一笔 VC 投资,这同时也是开源软件领域的第一笔风资 。近几年,最有代表性的就是 Puppet 跟 Elasticsearch。开源项目找 VC 看上去比较矛盾,源代码都是是公开的,就在 github 上。那怎么赚钱了?不过仔细研究下就会发现一点都不矛盾。这个应该是所有开源软件的套路了:
  • 卖服务,包括企业培训,7×24 的生产环境支持,快速的 bug 修复等等。
  • 还有一小部分的是收费的会开放更多的功能而免费的版本只提供基本的功能,这类的在各个 repo 里面能看到不少。

为什么要把 Elasticsearch 单独列出来说了?我认为这是开源公司跟 VC 合作的一个比较成功的案例,虽然说成功为时过早,不过从目前的发展来看,前景是相当的令人兴奋,完暴 Solr。

从去年中旬起,我们开始调研开源的日志收集处理方案,当时如果你 Google elasticsearch 同时肯定会出现 logstash/graylog2/kibana 等与之配套的条目,并且当时这几个(graylog2 目前已经不在主流了,接下来不提他了,Elasticsearch/logstash/kibana 已成为 log 收集处理的工业标准)项目都是各自独立发展的:

ES 在 12 年 11 月完成了 A 轮 $10M 的融资。紧接着,3 个月之后(这么快?),也就是 13 年 1 月 ES 宣布了 B 轮融资。从他们的对外报告中可以看到,这 $24M 的费用主要会用在哪里,其中之一就是人才的招聘。接着从他们的 blog 中可以明显的看到他们加快了招人、扩展海外市场(US)的步伐。插个话,说说我们的经历,我正好是在宣布拿到 A 轮的时候进入的,接着就经历了从 0 开始的大张旗鼓的数据中心建设,这个跟当年对外的口径基本一致。目前每个月仅仅花在带宽服务器网络设备上的费用就多的吓人,至于花在人上面的费用,大概数数应该都是能算得出来的。
Aug 27, 2013, Jordan Sissel 跟他的 logstash 加入到了 Elasticsearch,而 Rashid Khan 先前也加入到了 ES。再细挖他们的 blog(我疑惑的是,他们把员工的信息补充的如此详细,从 twitter 到 linkedin,不怕别别的公司挖墙脚么?) 就会发现,ES 把几乎跟其周边生态系统相关的人都挖过来了,从各个语言客户端的 API 作者到有经验的使用者传道者,只要是跟其相关的,统统都挖过来了。这个完全没问题,搞开源重要的一点就是要形成一个生态系统,看看 Hadoop 就知道了,孤立的搞下去基本会完蛋。挖人是需要花费很高的代价的,除了要晓之以礼,动之以情之外,Salary Package 是绝对不会低的:
We pay our people very well – probably above the industry average.
再者,ES 在 Bay Area 开设了除 Netherlands 的第二个办公室。除了这些,对外开放的免费的演讲,开设 Webinar 都是需要时间跟费用的。不说其他的,一天的下午茶零食,如果再包含午餐、晚餐,开销就不小了。
而上面这些费用,也只有 VC 才能供得起,ES 前后拿到的一共 $34M 估计也够花一阵子了。

从上面的可以看到,VC 不但对于传统意义上的[移动]互联网有比较大的帮助,对于这类研发开源软件的公司同样有不小的帮助,只要是一个注册了的公司,都离不开上面的这些日常开销,差别在于多少的问题。比如,ES 允许员工 home based,这能节省一定的房租开销,不过其他方面该花的还是要花的。

不知道有没有人好奇这些 VC 的钱都哪里来的?VC 的都是 LP 给的,LP 的钱就各种来路了。再者,我理解的天使投资跟 VC 的界限并不是很明显,所以一起说了。

  • 天使投资的钱一般都是自己的,一般的套路都是有幸经历了某家公司的 IPO,作为早起员工,拿到了一大笔的 option,30 财富自由退休,不能再继续的苦逼写代码了,于是把钱拿出来做投资,虽说是风险投资,不过最终肯定是稳赚的,这就是上面说的不会投资芯片、新药这类需要大量投资而不容易除成果的产业的原因,门槛很高;要么就是黑钱了,比如那个前段时间被搞的薛蛮子。
  • 对于 VC,这个就是 LP 的了。LP 的大多数都是一些机构投资者,比如公共养老基金、保险公司等等;再者就是跟天使投资类似的富有的个人,据说现在不少的煤老板都成了 LP 了。
  • 另外,现在不少互联网公司也要一起近来玩,比如 Google Ventures,他就投资了 Puppet;再比如阿里巴巴集团战略投资部,也投资收购了不少公司

大致就说这么多了,最后放一段 ES 拍的视频,制作精良鼓舞人心 ;-)

Elasticsearch 消息过期(TTL)

Graylog2 可以使用 ES 作为 message 的 index,通过 ES 的 TTL 功能,可以定期的删除过期的 log 信息,有点类似 logrotate。默认情况下,_ttl 是关闭的,
# curl -XGET http://111.111.152.147:9200/graylog2/message/_mapping?pretty=true
{
  "message" : {
    "dynamic_templates" : [ {
      "store_generic" : {
        "mapping" : {
          "index" : "not_analyzed"
        },
        "match" : "*"
      }
    } ],
    "properties" : {
      "created_at" : {
        "type" : "double",
        "ignore_malformed" : false
      },
      "facility" : {
        "type" : "string",
        "index" : "not_analyzed"
      },
      "full_message" : {
        "type" : "string",
        "analyzer" : "whitespace"
      },
      "host" : {
        "type" : "string",
        "index" : "not_analyzed"
      },
      "level" : {
        "type" : "long",
        "ignore_malformed" : false
      },
      "line" : {
        "type" : "long",
        "ignore_malformed" : false
      },
      "message" : {
        "type" : "string",
        "analyzer" : "whitespace"
      }
    }
  }
}
Continue reading

ElasticSearch-0.19.9 部署

起初下的是 0.18.7 版本,但是在使用 service wrapper 的时候,出现这样的错误,应该是个 bug,升级到 0.19.9 就没问题了。

# wget https://github.com/downloads/elasticsearch/elasticsearch/elasticsearch-0.19.9.tar.gz
# tar zxvf elasticsearch-0.19.9.tar.gz
# mv elasticsearch-0.19.9 elasticsearch
# rm elasticsearch*.tar.gz

# curl -L http://github.com/elasticsearch/elasticsearch-servicewrapper/tarball/master | tar -xz
# mv *servicewrapper*/service elasticsearch/bin/
# rm -Rf *servicewrapper*                

编辑 elasticsearch/config/elasticsearch.yml 文件,给 cluster 一个名字,这可以阻止该 cluster 跟该网段的其他 ElasticSearch cluster 通信:
cluster.name: graylog2

默认情况下,ElasticSearch 监听 0.0.0.0,对于 HTTP 的流量走 [9200-9300] 端口,对于 node-to-node 的通信走 [9300-9400] 端口,端口是一个范围,这意味着如果某个端口被占用,可以自动切换到下一个端口:
network.bind_host: 192.168.0.1
Continue reading

替代 logstash 默认 web 的 Kibana

Kibana 是跟 logstash 配套的一个 web 前端,比 logstash 默认的 9292 端口提供的 web 更为强大。

使用的前提是 logstash 已经能运行,配置很简单,按照官网提供的做就可以了:

1. 在 KibanaConfig.rb 修改 ES 的地址、端口
2. 安装 bundler 来解决依赖问题:
# apt-get install libcurl4-openssl-dev
# curl -L https://get.rvm.io | bash -s stable --ruby
# gem install bundler
# bundle install

除了上面这些,还可以修改 Kibana port、host 等,包括每页的条数等,都可以在 KibanaConfig.rb 中找到。
这里是 Kibana 的 infrastructure,可以参考下。另外,对于 ES 来说,也有一个第三方的前端可以用来监控查询,叫 elasticsearch-head,应该能满足基本的要求。

logstash 初体验

logstash 是用 JRuby 的,但是打包成了 jar 的包,下载即用。
下面这个是在单机上运行 LS:
# java -jar logstash-1.1.1-monolithic.jar agent -f logstash-simple.conf --log /var/log/logstash
注意:需要给机器分配足够的内存,否则会出现 HEAP 用完的错误,造成程序直接被 kill 退出。

这个可以附带一个 web:
# java -jar logstash-1.1.1-monolithic.jar agent -f logstash-simple.conf -- web --backend elasticsearch:///?local
注意那个 "–",其实是个分隔符,也可以像下面这样写,不过要开两个 shell:
# java -jar logstash-1.1.1-monolithic.jar agent -f logstash-simple.conf
# java -jar logstash-1.1.1.-monolithic.jar web --backend elasticsearch:///?local

默认开启这五个端口,其中 9200, 9300 是 ES 做监听的;9301, 9302 是 ES 跟 web interface 通讯;9292 是 web UI 的监听端口。
如果不开 web,则只有 9200,9300 以及 9301 这三个端口。

LS 的命令参数很简单,只分 agent 和 web 两种,具体的请看这里

LS 的收集方式分为 standalonecentralized
Continue reading