ELK日志系统
ELK stack是又Elasticsearch,lostash,kibana 三个开源软件的组合而成,形成一款强大的实时日志收集分析展示系统。
Logstash:日志收集工具,可以从本地磁盘,网络服务(自己监听端口,接受用户日志),消息队列中收集各种各样的日志,然后进行过滤分析,并将日志输入到Elasticsearch中。
Elasticsearch:日志分布式存储/搜索工具,原生支持集群功能,可以将指定时间的日志生成一个索引,加快日志查询和访问。
Kibana:可视化日志web展示工具,对Elasticsearch中存储的日志进行展示,还可以生成炫丽的仪表盘。
ELK工作原理:

(左边是三台web,每一台都会部署一台logstash,主要是把新添加的日志发送到redis队列里面,redis主要作用是存储多台web日志,如果是直接从代码里面写入数据,redis也可以防止数据丢失,logstash-index负责从redis相应的队列中里面取出日志,对日志进行加工后输出到elasticsearch,这边用了2台logstash-index,做了负载均衡以及高可用,elasticsearch主要做集群,前面三台互为主从,第四台不为主,不存储数据,主要是用来连接kibana,来实现日志界面化。)
版本:
elasticsearch-5.6.0、logstash-5.6.0、kibana-5.6.0
软件下载:
elasticsearch:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.0.tar.gz
logstash:
https://artifacts.elastic.co/downloads/logstash/logstash-5.6.0.tar.gz kibana:
https://artifacts.elastic.co/downloads/kibana/kibana-5.6.0-linux-x86_64.tar.gz
环境搭建:
ELK依赖于JDK,下载最新版本就可以的(自行操作)
安装elasticsearch
tar -zxvf elasticsearch-5.6.0.tar.gz -C /usr/local
mv /usr/local/elasticsearch-5.6.0 /usr/local/elasticsearch
修改elasticsearch配置文件(另外几台一样,只需修改node.name和network.host,最后一台node.master为false,node.data为false)
cluster.name: uooc-application ##集群名称
node.name: node-210 ##节点名称
node.master: true ##是否为主
node.data: true ##是否存储
path.conf: /usr/local/elasticsearch/config/ ##配置文件路径
path.data: /data/elasticsearch/data ##数据路径
path.logs: /data/elasticsearch/logs/ ##日志路径
discovery.zen.ping.unicast.hosts: ["192.168.1.99","192.168.1.100","192.168.1.210"]
bootstrap.memory_lock: true ##不写入内存
network.host: 192.168.1.211
http.port: 9200 # 增加参数,使head插件可以访问es
http.cors.enabled: true
http.cors.allow-origin: "*"
安装插件head:
1.下载head插件
wget https://github.com/mobz/elasticsearch-head/archive/master.zip
2.安装node
wget https://npm.taobao.org/mirrors/node/latest-v4.x/node-v4.4.7-linux-x64.tar.gz
tar -zxvf node-v4.4.7-linux-x64.tar.gz
ln -s /usr/local/src/node-v4.4.7-linux-x64/bin/* /usr/bin/
3.安装grunt
grunt是基于Node.js的项目构建工具,可以进行打包压缩、测试、执行等等的工作,head插件就是通过grunt启动
cd /usr/local/elasticsearch/elasticsearch-head-master
npm install -g grunt-cli #执行后会生成node_modules文件夹
grunt -version #检测是否安装成功
4.修改head插件源码
如果你es不是默认监听本地,不是默认端口,就需要修改_site/app.js这个文件

5.运行head
在elasticsearch-head-master目录下,npm install(安装下载的包)
启动:grunt server 或者npm run start
6.访问192.168.1.211:9100

增加用户es以及修改目录权限:
useradd es
chown -R es:es /data/elasticsearch
chown -R es:es /usr/local/elasticsearch
修改linux配置:
启动elasticsearch的时候,会有一些报错,需修改:
编辑/etc/sysctl.conf,添加vm.max_map_count=262144,立即生效(sysctl -w vm.max_map_count=262144)
编辑/etc/security/limits.conf,添加如下代码:
* soft memlock unlimited
* hard memlock unlimited * hard nofile 65536
* soft nofile 65536
启动elasticsearch(需用es用户启动):
/usr/local/elasticsearch/bin/elasticsearch > /data/elasticsearch/logs/run.log 2>&1 & (我一般丢在后台运行)
安装logstash:
tar -zxvf logstash-5.6.0.tar.gz -C /usr/local
mv /usr/local/logstash-5.6.0 /usr/local/logstash
创建logstash配置文件
1.设置用户权限
chown -R es:es /usr/local/logstash
su es
2.创建存放配置文件目录
mkdir /usr/local/logstash/conf.d
cd /usr/local/logstash/conf.d
3. 在conf.d目录下,编辑配置文件error.conf
vim error.conf
input {
file {
type => "php_error"
path => ["/dirpath/errors.log"]
}
file {
type => "nginx_error"
path => ["/dirpath/errors.log"]
}
} filter {
if [type] == "php_error" {
grok {
patterns_dir => "/usr/local/logstash/conf.d/define"
match => ["message", "%{PHP_LOG}"]
overwrite => ["message"]
}
date {
match => ["timestamp", "dd-MMM-yyyy HH:mm:ss"]
}
}
} output {
if [type] == "php_error" {
redis {
host => ["localhost"]
data_type => "list"
key => "LOGSTASH:PHP"
}
}
else if [type] == "nginx_error" {
redis {
host => ["localhost"]
data_type => "list"
key => "LOGSTASH:NGINX"
} }
}
这边主要是把web服务器上面的nginx、php错误日志,以一定的格式存储到redis对应的key中,filter用来对数据进行处理,gork进行正则匹配,因为默认的patterns没有我符合要求的,通过patterns_dir来添加自定义的正则,首先在conf.d目录下面创建defile目录,然后在该目录下编辑一个文件error(文件名随便创建),其中date主要的作用是把日志里面的时间更新给@timstamp,防止数据阻塞,时间有偏差,导致不能及时搜索到对应时间段的数据。
4.在当前目录下面创建defile目录
mkdir /usr/local/logstash/conf.d/defile
5.编辑error文件
LETTER [a-zA-Z/]+
PHP_TS %{MONTHDAY}[/-]%{MONTH}[/-]%{YEAR} %{TIME}
PHP_LOG \[%{PHP_TS:timestamp} %{LETTER:timezone}\] PHP %{LOGLEVEL:loglevel}: %{GREEDYDATA:message}
6. 日志内容格式如下:
[30-Nov-2017 14:44:44 Asia/Shanghai] PHP Warning: mkdir(): Permission denied in /data/xxx/hello.php on line 27
7.启动error.conf配置文件
mkdir /usr/local/logstash/logs
/usr/local/logstash/bin/logstash -f /usr/local/logstash/conf.d/error.conf >/usr/local/logstash/logs/run.log 2>&1 &
8.手动触发php错误日志
cat >> /data/xxx/errors.log << EOF
[30-Nov-2017 14:44:44 Asia/Shanghai] PHP Warning: mkdir(): Permission denied in /data/xxx/hello.php on line 27
EOF
9.通过redis查看该key

10.创建导入es中的配置文件php.conf
input {
redis {
host => "127.0.0.1"
port => 6379
data_type => "list"
key => "LOGSTASH:PHP"
codec => "json"
threads => 3
batch_count => 10
}
}
output {
stdout {
codec => rubydebug
}
elasticsearch {
hosts => ["192.168.1.211:9200"]
index => "php-error-%{+YYYY.MM.dd}"
}
}
把对应的数据输出到终端以及elasticsearch中去。
11.启动php.conf配置文件
/usr/local/logstash/bin/logstash -f /usr/local/logstash/conf.d/php.conf --path.data /usr/local/logstash/logs/1 > /usr/local/logstash/logs/php.log 2>&1 &
安装kibana
tar -zxvf kibana-5.6.0-linux-x86_64.tar.gz -C /usr/local
mv /usr/local/kibana-5.6.0-linux-x86_64 /usr/local/kibana
chown -R es:es /usr/local/kibana
修改配置文件:
默认kibana.yml,是监听本地的5601端口,以及连接本地的elasticsearch。如果需要修改则:
server.host: "192.168.1.211"
elasticsearch.url: "http://192.168.1.211:9200"
启动kibana:
mkdir /usr/local/kibana/logs
/usr/local/kibana/bin/kibana > /usr/local/kibana/logs/run.log 2>&1 &
创建对应的索引名(可以模糊创建),访问192.168.1.211:5601

ELK日志系统的更多相关文章
- ELK日志系统:Elasticsearch+Logstash+Kibana+Filebeat搭建教程
ELK日志系统:Elasticsearch + Logstash + Kibana 搭建教程 系统架构 安装配置JDK环境 JDK安装(不能安装JRE) JDK下载地址:http://www.orac ...
- 创业公司做数据分析(四)ELK日志系统 (转)
http://blog.csdn.net/zwgdft/article/details/53842574 作为系列文章的第四篇,本文将重点探讨数据采集层中的ELK日志系统.日志,指的是后台服务中产生的 ...
- ELK日志系统之通用应用程序日志接入方案
前边有两篇ELK的文章分别介绍了MySQL慢日志收集和Nginx访问日志收集,那么各种不同类型应用程序的日志该如何方便的进行收集呢?且看本文我们是如何高效处理这个问题的 日志规范 规范的日志存放路径和 ...
- 【7.1.1】ELK日志系统单体搭建
ELK是什么? 一般来说,为了提高服务可用性,服务器需要部署多个实例,每个实例都是负载均衡转发的后的,如果还用老办法登录服务器去tail -f xxx.log,有很大可能错误日志未出现在当前服务器中, ...
- 创业公司做数据分析(四)ELK日志系统
作为系列文章的第四篇.本文将重点探讨数据採集层中的ELK日志系统.日志.指的是后台服务中产生的log信息,一般会输入到不同的文件里.比方Django服务下,一般会有nginx日志和uWSGI日志. ...
- Centos6.7 ELK日志系统部署
Centos6.7 ELK日志系统部署 原文地址:http://www.cnblogs.com/caoguo/p/4991602.html 一. 环境 elk服务器:192.168.55.134 lo ...
- ELK日志系统之kibana的使用操作
1.ELK日志系统打开后,打开kibana的操作界面,第一步创建索引模式: 第2步:创建日志索引 第3步:创建成功 第4步:查看30分钟时间段内的日志数据,也可以查今天的,今月的,今年的 放牛去
- 03篇ELK日志系统——升级版集群之ELK日志系统整合springboot项目
[ 前言:整个ELK日志系统已经搭建好了,接下来的流程就是: springboot项目中的logback日志配置通过tcp传输,把springboot项目中所有日志数据传到————>logsta ...
- 02篇ELK日志系统——升级版集群之kibana和logstash的搭建整合
[ 前言:01篇LK日志系统已经把es集群搭建好了,接下来02篇搭建kibana和logstash,并整合完成整个ELK日志系统的初步搭建. ] 1.安装kibana 3台服务器: 192.168.2 ...
- 01篇ELK日志系统——升级版集群之elasticsearch集群的搭建
[ 前言:以前搭了个简单的ELK日志系统,以我个人的感觉来说,ELK日志系统还是非常好用的.以前没有弄这个ELK日志系统的时候,线上的项目出了bug,报错了,要定位错误是什么,错误出现在哪个java代 ...
随机推荐
- .NET基础知识(一、认识.Net)
参考链接:http://blog.csdn.net/shanyongxu/article/details/50849111 认识.NET平台 可能很多人问什么是.NET框架,它包含了哪些内容?为开发程 ...
- iOS开发之--使用storyboard下,tabbar小图标和文字颜色的设置
在开发项目的时候,如果是使用故事版设计的架构,那么在设置tabbar小图标的时候,可能会出现一点小问题, 成功的设置方法如下: 1.设置seleectedImage和image,其实就是非选中状态的图 ...
- Spring JDBC样例
这里介绍一下通过Spring JDBC的方式进行数据库的增删改查的操作.在进行程序的编写之前我们需要在本地MySQL数据库中创建一张User表,如下所示: create database user_d ...
- Zabbix-3.0.x使用OneAlert发送告警
导读 OneAlert 是国内首个 SaaS 模式的云告警平台,集成国内外主流监控/支撑系统,实现一个平台上集中处理所有 IT 事件,提升 IT 可靠性.它能以史上第二快的速度,对事件进行智能的组织. ...
- 最受欢迎的五大BUG管理系统
五大最受欢迎的BUG管理系统 Google在中国大*陆遭遇变故做出暂时性的退出大*陆市场,也使很多忠实的用户受到小小的挫折,以本公司为例,原本的BUG都是记录在google的EXCEL在线文档中 ...
- 较快的maven的settings.xml文件
<?xml version="1.0" encoding="UTF-8"?> <settings> <!-- <localR ...
- KVM虚拟机克隆及快照管理
一,克隆 查看虚拟机硬盘位置(其中centos1为虚拟机名称) virsh edit centos1 克隆(centos1为需要克隆的虚拟机名称centos2为克隆后的虚拟机名称CentOS2.qco ...
- 关于一个非常非常无语的bug,与君共勉
今天,哦,不对,是昨天晚上,我花了大概四十分钟去找一个bug,结果还没找到 错误代码" $('#sendAreaInfo').citypicker('reset'); $('#sendAre ...
- centos下vsftpd不能显示文件,不能创建文件及文件夹
centos下vsftpd登录正常,但不能显示文件,不能创建文件及文件夹 这是由于selinux的机制 通过命令 [root@localhost www]# getsebool -a|grep ftp ...
- 并发编程 - 线程 - 1.互斥锁/2.GIL解释器锁/3.死锁与递归锁/4.信号量/5.Event事件/6.定时器
1.互斥锁: 原理:将并行变成串行 精髓:局部串行,只针对共享数据修改 保护不同的数据就应该用不用的锁 from threading import Thread, Lock import time n ...