Mac上搭建ELK
转载自我的个人博客:http://blog.ywheel.cn/post/2017/03/04/setup_elk_on_mac/
最近的项目需要对文本数据各字段进行快速检索、组合查询、模糊查询,在架构选择上选择了Elasticsearch作为支撑这些功能的存储和搜索引擎。其他的不说了,刚好我的第一台mac到了,直接搞起。
什么是ELK
日志分析平台可以有多种技术架构的选型,但经过了多年的演变,现在比较流行的应该就是ELK了。 ELK三个字母的意义如下:
- Elasticsearch
- Logstash
- Kibana
架构图下图:
图中的Shipper和Indexer都可以是Logstash, Broker一般为Redis,也可以是kafka等。而Search & Storage则主要是Elasticsearch了,一方面接收上游index好的文档,另一方面提供API支持对内容的检索。而kibana则是一个web interface, 可以提供简单易用的界面让用户方便的写出搜索的表达式来访问Elasticsearch.
对于这三部分都有很多深入的点,以后有机会要深入学习和记录。
使用brew安装
既然使用了mac,那么使用brew安装程序则是一个最简单不过的方式了。
首先安装Elasticsearch,直接输入以下命令即可:
brew install elasticsearch
- 1
但可能遇到问题,比如要求Java的版本是1.8(我安装的Elasticsearch的按本是5.2.2),这里面可能涉及到还要安装brew cast
用来安装java8, 然后又提示还有其他依赖(后悔没记录下来。。。),而需要xcode-command-tool, 折腾了不少时间。
安装完成后,可以查看elasticsearch的版本:
$ elasticsearch --version
Version: 5.2.2, Build: f9d9b74/2017-02-24T17:26:45.835Z, JVM: 1.8.0_121
- 1
- 2
启动和停止elasticsearch也很简单:
brew services start elasticsearch
brew services stop elasticsearch
- 1
- 2
浏览器访问http://localhost:9200
可以看到Elasticsearch的信息:
{
name: "bWXgrRX",
cluster_name: "elasticsearch_ywheel",
cluster_uuid: "m99a1gFWQzKECuwnBfnTug",
version: {
number: "5.2.2",
build_hash: "f9d9b74",
build_date: "2017-02-24T17:26:45.835Z",
build_snapshot: false,
lucene_version: "6.4.1"
},
tagline: "You Know, for Search"
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
接着安装logstash:
brew install logstash
- 1
安装好后查看版本:
$ logstash --version
logstash 5.2.2
- 1
- 2
浏览器访问http://localhost:9600
可以看到如下信息:
{
host: "ywheeldeMacBook-Pro.local",
version: "5.2.2",
http_address: "127.0.0.1:9600",
id: "70b78f4a-fe0f-4187-bf71-fe1f60b74e0a",
name: "ywheeldeMacBook-Pro.local",
build_date: "2017-02-24T17:46:55Z",
build_sha: "57984d20eb28b0df40a59077c600ec1a399d46f5",
build_snapshot: false
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Kibana不需要通过brew安装,直接下载压缩包后,解压后执行./kibana
即可。不过我还是在/usr/local/bin/
下创建了kibana
和kibana-plugin
的软连接, elasticsearch
,elasticsearch-plugin
,logstash
和logstash-plugin
都在这个目录下,以后安装插件的话,还都需要用上这些*-plugin
.
Kibana安装完成后,需要在config/kibana.yml
文件中,确认elasticsearch.url: "http://localhost:9200"
测试写入和查询
写入Elasticsearch可以很简单,其本身就提供了RESTFul的API接口,参考https://www.elastic.co/guide/en/kibana/3.0/import-some-data.html ,通过以下命令创建shakespeare index:
curl -XPUT http://localhost:9200/shakespeare -d '
{
"mappings" : {
"_default_" : {
"properties" : {
"speaker" : {"type": "string", "index" : "not_analyzed" },
"play_name" : {"type": "string", "index" : "not_analyzed" },
"line_id" : { "type" : "integer" },
"speech_number" : { "type" : "integer" }
}
}
}
}
';
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
通过以下命令将数据写入Elasticsearch:
curl -XPUT localhost:9200/_bulk --data-binary @shakespeare.json
- 1
数据写入后,到kibana目录运行./kibana
,启动后访问:http://localhost:5601/
, 看到kibana界面后会提示”Configure an index pattern”。, 如下图:
刚才在写入数据的时候已经创建了shakespeare index, 且不是按照时间分布的日志文件(shakespeare只有一个json文件),因此,取消勾选Index contains time-based envents
,输入shakespeare
后,就能看到create
按钮了。
点击kibana的Discover页面,输入WESTMORELAND
查询,可以看到有110个结果:
监控和安全
在Elasticsearch 5.x的时代,监控和管理由X-Pack统一完成,包含:
- 安全:用户权限管理
- 告警:自动告警
- 监控:监控Elasticsearch集群的状态
- 报告:发送报告、导出数据
- 图表:可视化数据
在安装X-Pack之前,需要停止Kibana和Elasticsearch:
elasticsearch-plugin install x-pack
kibana-plugin install x-pack
- 1
- 2
安装完成后,启动elasticsearch和kibana,访问kibana时发现需要登录了, 默认用户名和密码是elastic/changeme。
后续可以在Management面板中进行用户和角色的配置,也可以看到新增了Reporting。
在Monitoring页面中可以看到Elasticsearch和Kibana的状态,点击Indices还可以看到具体索引的状态。
告警功能和报表功能后续再进行详细研究。之前在A家的时候,记得有个基于日志的告警功能:当service的日志中出现了ERROR或FATAL,可以自动触发告警。有了X-Pack后,这个功能应该也是可以通过ELK来实现的啦。
通过访问http://localhost:9200/_cat/indices?v
查看Elasticsearch的Index, 可以发现几个新的与监控有关的index:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open .monitoring-es-2-2017.03.04 COZvO_dlSkqdEtntrZrzFA 1 1 10240 154 4.5mb 4.5mb
green open .security XEeHRF5NT0ud2jpxOzsoHw 1 0 1 0 2.8kb 2.8kb
yellow open .kibana p-cJGBCXQySNGR0924jRdQ 1 1 2 1 9.8kb 9.8kb
yellow open .monitoring-data-2 QZt0hpTISUO_58pWoG5Hyw 1 1 3 0 6.9kb 6.9kb
yellow open .monitoring-kibana-2-2017.03.04 nLHKuL1KTiCE2lsWz8tdkA 1 1 849 0 245kb 245kb
yellow open shakespeare zPCLp4KmTkiu7m4tYcA_Iw 5 1 111396 0 28.1mb 28.1mb
- 1
- 2
- 3
- 4
- 5
- 6
- 7
使用Logstash导入博文
在上面的操作中,直接使用了elasticsearch的API接口来进行数据的导入,而使用logstash也能够很方便的写入elasticsearch。 首先得生成一个logstash的conf文件,比如我想建立我的博客的索引,在我的家目录下创建了my_blog.conf文件:
input{
file{
path => ["/Users/ywheel/my_blog/content/about.md"]
}
}
output{
elasticsearch{
hosts => ["localhost:9200"]
index => "my_blog"
user => "elastic"
password => "changeme"
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
注意拜X-Pack所赐,这配置文件里面对elasticsearch需要用户名和密码。然后敲入logstash -f my_blog.conf
来执行,但却一直不成功。后来翻logstash的文档 https://www.elastic.co/guide/en/logstash/current/pipeline.html ,里面写了一句这样的话:
Inputs
You use inputs to get data into Logstash. Some of the more commonly-used inputs are:
- file: reads from a file on the filesystem, much like the UNIX command tail -0F
- syslog: listens on the well-known port 514 for syslog messages and parses according to the RFC3164 format
- redis: reads from a redis server, using both redis channels and redis lists. Redis is often used as a "broker" in a centralized Logstash installation, which queues Logstash events from remote Logstash "shippers".
- beats: processes events sent by Filebeat.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
file
这个input相当于使用tail
来获取文件中的数据的啊, 我的about.md压根就没有变化,因此也没有内容被写入了Elasticsearch。于是,我把conf改成了这样:
input{
file{
path => ["/Users/ywheel/test.md"]
}
}
output{
elasticsearch{
hosts => ["localhost:9200"]
index => "my_blog"
user => "elastic"
password => "changeme"
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
运行logstash -f my_blog_conf
后,再运行cat /Users/ywheel/my_blog/content/about.md > /Users/ywheel/test.md
, 然后发现数据写入了Elasticsearch, index也多了一个my_blog
。到Kibana中添加my_blog
这个index pattern后,就可以在Discover进行搜索了。比如我搜索“程序员”:
看来中文分词得改进一下,不过现在也已经很酷了! 以后可以对整个博客进行全文检索了~~
Mac上搭建ELK的更多相关文章
- 在MAC上搭建cordova3.4.0的IOS和android开发环境
Hello,大家好,今天给大家说说在mac上搭建cordova3.4.0的iOS和Android开发环境,首先下载cordova,地址:https://cordova.apache.org/#down ...
- 1、在MAC上搭建React Native开发环境
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- Mac上搭建直播服务器Nginx+rtmp
简介 nginx是非常优秀的开源服务器,用它来做hls或者rtmp流媒体服务器是非常不错的选择,本人在网上整理了安装流程,分享给大家并且作备忘. 步骤安装 1.安装Homebrow Homebrew简 ...
- mac上搭建appium+IOS自动化测试环境(一)
阅读须知 由于OS X系统最近才开始接触,所以有些东西也不是很清楚,这里只提供方法不提供原理,能解释清楚的我也会尽量解释.可能也有一些地方说的不严谨或有错的,还望大家指点一二. 实验环境 操作系统: ...
- 在Mac上搭建React Native开发环境
概述 前面我们介绍过在window环境下开发React Native项目,今天说说怎么在mac上搭建一个RN的开发环境. 配置mac开发环境 基本环境安装 1.先安装Homebrew:用于安装Node ...
- Mac 上搭建基于 Hexo + GitHub 个人博客
环境配置 本人电脑系统:macOS Node.js 生成静态页面.安装Node.js Git 用于将本地 Hexo 内容提交到 Github.Xcode自带Git(前提:macOS已经安装了Xcode ...
- mac上搭建appium+IOS自动化测试环境(二)
上一篇: mac上搭建appium+IOS自动化测试环境(一) 9.安装appium-xcuitest-driver依赖 进入WebDriverAgent安装目录,运行bootstrap 首先进入目录 ...
- Mac上搭建直播服务器Nginx
Mac上搭建直播服务器Nginx 1.安装Homebrew,执行命令 Homebrew简称brew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件,可以说Homebrew就 ...
- [转] 在Mac上搭建React Native开发环境
原文链接: http://blog.csdn.net/xiangzhihong8/article/details/53914336 概述 前面我们介绍过在window环境下开发React Native ...
随机推荐
- yum安装的时候报错,关于python的函数库
我在执行yum -y install nc命令的时候出现如下报错 There was a problem importing one of the Python modulesrequired to ...
- NOIP2017提高组Day2T3 列队 洛谷P3960 线段树
原文链接https://www.cnblogs.com/zhouzhendong/p/9265380.html 题目传送门 - 洛谷P3960 题目传送门 - LOJ#2319 题目传送门 - Vij ...
- sql重点题
--https://blog.csdn.net/weixin_39718665/article/details/78161013/*1.用系统管理员登陆,我这里用户名是system,密码是manage ...
- HTML的5种空格表示
HTML提供了5种空格实体(space entity),它们拥有不同的宽度,非断行空格( )是常规空格的宽度,可运行于所有主流浏览器.其他几种空格( )在不同浏览器中宽度各异. ...
- 大家的备忘录——xpage_在线引用jQuery
<xp:this.resources> <xp:dojoModule name="dojo.fx"></xp:dojoModule> <x ...
- [ 严重 ] my网SQL注入
RANK 80 金币 100 数据包 POST maoyan.com/sendapp HTTP/1.1Host: xxx.maoyan.comUser-Agent: Mozilla/5.0 ( ...
- spring注解工具类AnnotatedElementUtils和AnnotationUtils
一.前言 spring为开发人员提供了两个搜索注解的工具类,分别是AnnotatedElementUtils和AnnotationUtils.在使用的时候,总是傻傻分不清,什么情况下使用哪一个.于是我 ...
- F - Tmutarakan Exams URAL - 1091 -莫比乌斯函数-容斥 or DP计数
F - Tmutarakan Exams 题意 : 从 < = S 的 数 中 选 出 K 个 不 同 的 数 并 且 gcd > 1 .求方案数. 思路 :记 录 一 下 每 个 数 的 ...
- 说说nginx,iis,apache,tomcat
一.nginx ngnix是反向代理服务器,它是代理,本身并不执行,是个传话筒,把用户提交的请求转发给web服务器,再把web服务器的结果转发给用户.为了提高性能,启用反向代理,实际的web服务器可以 ...
- DOS简单文件指令
DOS和Windows最大的不同在于DOS命令方式操作,所以使用者需要记住大量命令及其格式使用方法,DOS命令分为内部命令和外部命令, 内部命令是随每次启动的COMMAND.COM装入并常驻内存,而外 ...