ELK搭建指南(linux及Windows)
当前公司系统使用mongodb记录日志,最近想对日志做可视化分析,尝试了exceptionless,感觉扩展性不高,所以尝试搭建elk,过程如下:
ELK核心由三部分组成:
Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash是一个完全开源的工具,它可以对你的日志进行收集、格式化处理,最后输出到指定存储。
kibana 是一个开源和免费的前端框架,它可以为ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
搭建过程:
Linux下:
Linux下使用Docker镜像搭建,简单方便,本文默认Docker已经安装好。
从DockerHub拉取Elasticsearch镜像:docker pull elasticsearch.
从DockerHub拉取Logstash镜像:docker pull logstash
从DockerHub拉取kibana镜像:docker pull kibana
输入命令查看拉取的镜像:Docker Images(如果失败切换到管理员账户 sudo su)

创建elk文件夹:mkdir elk
进入elk文件夹:cd elk
首先启动Elasticsearch服务:
创建Elasticsearch数据存放文件夹:mkdir esdata
docker run -d --name elasticsearch -v "$PWD/esdata":/usr/share/elasticsearch/data -p 9200:9200 elasticsearch:latest
-d 守护进程模式,使服务在后台运行
--name 设置docker 启动的容器名称
-v 外挂数据卷,用来存储Elasticsearch相关数据,方式容器删除时数据丢失,冒号前为宿主机路径,冒号后为容器路径
$PWD:获取当前完整路径
-p 9200:9200 端口映射,将宿主机9200端口映射到容器9200端口,冒号前为宿主机端口,冒号后为容器端口(Elasticsearch默认使用9200端口)
elasticsearch:latest 容器启动使用的镜像名称(上面拉取的镜像)
启动后浏览器访问宿主机ip:9200,看到下图说明启动成功:

启动logstash服务:
logstash支持从文件、tcp、http、消息队列、redis等数据源输入日志数据,本文使用http方式输入。
在elk文件夹下创建配置文件logstash.conf,配置如下:
input {
http{
host => "0.0.0.0" //所有地址都可以输入
port => 5044 //输入端口5044
additional_codecs => {"application/json"=>"json"} //json格式
codec => "plain" //编解码规则
threads => 4 //同时开启线程
ssl => false
}
}
filter {
json {
source => "message"
}
}
output {
elasticsearch {
hosts => ["<elasticsearchIp>:9200"]
index =>"logstash-%{+YYYY.MM.dd}"
}
}
上面配置logstash会监听5044端口,将发送来的日志处理后写入elasticsearch
使用创建的配置文件启动logstash:
docker run -d --name logstash -p 5044:5044 -v "$PWD":/config-dir logstash:latest -f /config-dir/logstash.conf
启动kibana服务:
docker run -d --name kibana -e ELASTICSEARCH_URL=http://<elasticsearchIp>:9200 -p 5601:5601 kibana:latest
查看启动容器:docker ps
看到下图说明三个组件全部启动成功
post日志到<宿主机Ip>:5044/(使用fiddler或者其他工具或者自己写代码)
使用浏览器访问kibana:<宿主机Ip>:5601
使用默认的logstash-*的索引名称,并且是基于时间戳的,点击“Create”即可

显示如下界面说明索引创建成功:

点击左侧面板的“Discover”选项就可以看到刚刚写入的内容
Linux下搭建完成,Kibana使用及自定义图表创建可查看官方文档:https://www.elastic.co/guide/en/kibana/current/index.html
Windows下:
首先安装Java的sdk,并配置环境变量,如不清楚请自行百度。
下载三个组件并解压,地址:https://www.elastic.co/products/elasticsearch

cmd进入elasticsearch的bin目录,运行elasticsearch.bat
浏览器访问http://localhost:9200/,访问正常说明启动成功
在logstash文件夹的bin目录里新建logstash.conf配置文件,配置如下:
input {
http{
host => "0.0.0.0"
port => 5044
additional_codecs => {"application/json"=>"json"}
codec => "plain"
threads => 4
ssl => false
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index =>"logstash-%{+YYYY.MM.dd}"
}
}
cmd进入logstash的bin目录,运行logstash -f logstash.conf
cmd进入logstash的conf目录,编辑kibana.yml如下

cmd进入kibana的bin目录,运行kibana.bat
windows下搭建完成,浏览器访问http://localhost:5601/,显示同linux下结果一样,则说明搭建成功,可向http://localhost:5044发送日志,在kibana界面可以显示(生产环境可将三个组件安装为系统服务)。
根据官方文档,logstash接收队列较小,如日志写入并发量大,可在logstash前搭建一层消息队列或者redis,以解决并发问题。
更新:
elk在分析日志方面确实好用,但是经研究发现公司生产环境 延迟严重,分析后发现http传输效率不高,造成日志在应用端堆积,所以针对性的进行了优化:
将logstash的input方式由http改为tcp方式,使用socket短时间长连接方式发送日志,经测试可以达到20000+每秒的发送速度。
ps: tcp输入日志格式如果采用json格式,需要在每条日志后面添加换行符,不然会出现接收不到的情况。
这是由于logstash的tcp插件如果编码插件配置为json,会使用json_lines编码插件,没有换行符就会被认为没有结束,所以不会处理。
ELK搭建指南(linux及Windows)的更多相关文章
- 【tomcat环境搭建】Linux和Windows下tomcat开机自启动设置
目前很多项目都部署在tomcat上,频繁操作中,每次启动或关闭tomcat都稍显麻烦,那如何设置tomcat的开机自启动? Linux下tomcat的开机自启动设置 网上主要有两种方式,一种是shel ...
- 使用samba实现linux与windows共享(测试成功)
samba服务器搭建 实现linux与windows文件共享有很多种方法,诸如wpc,vmtools等,今天我来介绍我在rehat系统中实验成功并且现在在用的的方法,直接给出操作步骤: ...
- Boost下载安装编译配置使用指南(含Windows和Linux
理论上,本文适用于boost的各个版本,尤其是最新版本1.45.0:适用于各种C++编译器,如VC6.0(部分库不支持),VS2003,VS2005,VS2008,gcc,C++ Builder等.先 ...
- Boost下载安装编译配置使用指南(含Windows和Linux) .
理论上,本文适用于boost的各个版本,尤其是最新版本1.39.0:适用于各种C++编译器,如VC6.0(部分库不支持),VS2003,VS2005,VS2008,gcc,C++ Builder等.先 ...
- 用Windows+VirtualBox搭建嵌入式Linux开发环境
Windows+VirtualBox的嵌入式Linux开发环境的搭建 最近一直在学习Linux的设备驱动编写,一直是在物理机上安装的Ubuntu进行的,但是在Ubuntu12.04的系统中,已经不能用 ...
- 如何在RHEL7上搭建Samba服务实现Windows与Linux之间的文件共享
如何在RHEL7上搭建Samba服务实现Windows与Linux之间的文件共享 实现环境:VMware workstations.RHEL7.0 第一步:配置网卡IP及yum软件仓库 命令:vim ...
- Windows下C,C++开发环境搭建指南
Windows下C,C++开发环境搭建指南 前情提要 基于近一段时间很多网友发邮件反馈,说一些项目编译出现问题,诸如此类的情况. 就觉得很有必要写一篇C,C++开发环境的小指南,统一回复. 1.君欲善 ...
- 【Linux】在Win10上搭建WSL(适用于Linux的Windows子系统)
1.打开WSL ,控制面板 -- 程序 -- 程序和功能 -- 打开或关闭Windows功能 - 选中[适用于Linux的Windows子系统] 2.开启后重启电脑 3.在Win10自带的Micro ...
- Samba搭建Linux和Windows文件共享服务
一.Samba简介 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共享 ...
随机推荐
- Unity3D拖尾组件在Ui界面下正常显示
在项目中Canvas下UI添加拖尾效果,会发现Ui完全遮挡住了拖尾. 如果要正常显示通常需要对Canvas进行设置,Render Mode 我这里用的是-Camera模式 其次要对Material 下 ...
- (转)ManyToMany注解
@ManyToMany 注释:表示此类是多对多关系的一边,mappedBy 属性定义了此类为双向关系的维护端,注意:mappedBy 属性的值为此关系的另一端的属性名. 例如,在Student类中有 ...
- 使用mysqldump备份数据库
#! /bin/shday_str=`date +%j`day=`date +%Y%m%d`days_str=`echo "$day_str % 60"|bc`cd /home/d ...
- Async(异步)(一)
在谈到异步的概念时,先要了解几个概念了. 什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源. 而一个进程又是由多个线程所组成的 什么是线程? 线程 ...
- GIT - 代码管理工具之命令集
GIT 是一个快速.可扩展的分布式版本控制系统,它具有极为丰富的命令集,对内部系统提供了高级操作和完全访问.它会把你的每次提交的文件的全部内容都会记录下来. GIT特点 速度 简单的设计 对非线性开发 ...
- Mybaits简诉
先组织一下语言!Mybatis是一个框架,一个数据持久化的框架,作用就是SQL语句的映射!减少了JDBC繁琐的数据操作与类型转换!简而言之,就是方便.轻巧!什么是持久化,持久,恩,JDBC就是一个数据 ...
- Hibernate 实体关联关系映射----总结
在我看来,Hibernate提供这些映射关系,常用就是一对一和多对一,并且在能不用连接表的时候尽量不要用连接表.多对多会用到,如果用到了,应该首先考虑底层数据库设计是否合理. 在实际开发中,在Hi ...
- 解决div里面img的缝隙问题(转)
图片IMG与容器下边界之间有空隙怎么办?这里介绍3中简单的解决方法. 第一,给图片img标签display:block. img{display:block} 第二,定义容器里的字体大小为0. div ...
- 【D3】cluster layout
一. 和其他D3类一样,layout 可以链式传递,使用简明的申明添加多种自定义设置. 二.API # d3.layout.cluster() Creates a new cluster layout ...
- 接口自动化(Python)-利用正则表达式从返回的HTML文本中截取自己想要的值
例如一个功能接口的返回值 是一个HTML文本: 例如我们要取上图中标识的id的值,并且这个值是动态的,这是我们就需要用到正则表达式进行匹配. 如下是正则匹配的方法(代码中都有注释): 我们在真正使用的 ...