ELK的搭建以及使用
一、架构如图:

二、工作机制:
在需要收集日志的应用上安装filebeat(需要修改配置文件,配置文件稍后介绍),启动filebeat后,会收集该应用的日志推送给redis,然后logstash从redis中收集日志推送到Elasticsearch。
因Elasticsearch是一个集群,所以只需要在某台Elasticsearc安装一个Kibana提供给用户一个可视化界面即可。
而在学习Elasticsearch的过程中,必不可少需要通过一些工具查看es的运行状态以及数据。如果都是通过rest请求,未免太过麻烦,而且也不够人性化,所以需要安装一个head插件。同上,只需要在某台Elasticsearc安装一个head插件,提供给运维查看数据状态即可。
三、 安装准备
1、 安装包
通过https://www.elastic.co/downloads,可以下载es所有需要的安装包,可自行根据需要下载对应版本。
并且将包都解压到/opt/platform
以下是目前es使用到的安装包:
Elasticsearch5.2.X
安装方法:
修改配置文件:vim /opt/platform/elasticsearch/config/elasticsearch.yml
配置详见文件下文。
启动ela: ./bin/elasticsearch
Filebeat5.2.X
安装方法:
创建目录:mkdir conf
复制配置文件:cp filebeat.yml /conf
修改配置文件:vim /opt/platform/filebeat/conf/filebeat.yml
配置详见文件下文。
启动filebeat: ./filebeat -c conf/filebeat.yml &
Logstash5.2.X
安装方法:
创建目录:mkdir conf
配置文件:vim /opt/platform/filebeat/conf/ filebeat-java-to-es.conf
配置详见文件下文。
启动logstash:/opt/platform/logstash/bin/logstash -f /opt/platform/logstash/conf/filebeat-java-to-es.conf &
Es-head5.2.x
安装方法:
Github下载源码:git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
安装node依赖模块:npm install
ln -s /opt/platform/es-head/node_modules/grunt/bin/grunt grunt
启动es head插件的独立服务:nohup grunt server &
或者nohup npm run start &
配置文件:
vim Gruntfile.js
port按需更改,默认9100
Kibana5.2.X
安装方法:
修改配置文件:vim /opt/platform/kibana/config/kibana.yml
配置文件修改内容如下:
server.port: 5601
server.host: "x.x.x.x"
elasticsearch.url: http://x.x.x.x:9200
Redis3.2.8(常规安装,不做介绍了)
Jdk1.8.0_121(常规安装,不做介绍了)
2、 端口开放:
|
redis+logstash |
6379\9600 |
|
redis+logstash |
6379\9600 |
|
redis+logstash |
6379\9600 |
|
es+kibana |
9200\9300\5601 |
|
es+head |
9100\9200\9300\ |
|
Es |
9200\9300\ |
3、依赖包
elsticserch依赖于java1.8以上版本,需要安装JDK1.8+,同样logstash也需要依赖jdk,所以也需要安装。
四、配置文件:
1、Elasticserch
1、elasticserch 启动时需要设置vm.max_map_count和允许打开的最大文件描述符数量
(1)、修改vm.max_map_count
vi /etc/sysctl.conf
增加以下内容
vm.max_map_count=262144
(2)、修改允许打开的最大文件描述符数量
vim /etc/security/limits.d/10-nproc.conf
* soft nproc 20480
* hard nproc 20480
root soft nproc unlimited
root hard nproc unlimited
* soft nofile 1048576
* hard nofile 1048576
ops soft memlock unlimited
ops hard memlock unlimited
(3)、修改elstic的配置文件,以下是比较重要的参数;
- path.data and path.logs:elstiserch存放数据和日志的路径。
- cluster.name:集群名称,这个作为不同节点加入一个集群的最重要的依据
- node.name:每个节点的名称
- network.host:每个节点监听IP地址
- discovery.zen.ping.unicast.hosts:集群的自动发现功能
- discovery.zen.minimum_master_nodes:设置集群中有多少个master资格的节点,公式为:总结点/2+1
PS: 需要在elasticsearch的配置文件中加入以下内容,这样head才能连接到elasticsearch查看集群状态:
thread_pool.search.queue_size: 10000
http.cors.enabled: true
http.cors.allow-origin: "*"
2、Filebeat配置文件
#prospectors config
filebeat.prospectors:
- input_type: log
paths:
- /opt/platform/quarkloan-api-app/logs/convertor/convertorinfo.log
- /opt/platform/quarkloan-api-app/logs/convertor/convertorerror.log
encoding: plain
document_type: loanapi
multiline.pattern: ^[0-9]
multiline.negate: true
multiline.match: after
#global config
filebeat.registry_file: ${path.data}/registry-loanapi
#output.redis config
output.redis:
hosts: ["10.19.64.69:6379", "10.19.64.70:6379", "10.19.64.71:6379"]
key: filebeat-java
datatype: list
loadbalance: true
3、Logstash配置文件
input {
redis {
data_type => "list" #value type is STRING
key => "filebeat-java" #value type is STRING
host => "10.19.64.69" #value type is STRING
port => 6379 #value type is NUMBER,Default value is 6379
}
redis {
data_type => "list"
key => "filebeat-java"
host => "10.19.64.70"
port => 6379
}
redis {
data_type => "list"
key => "filebeat-java"
host => "10.19.64.71"
port => 6379
}
}
filter {
#JAVA日志解析,时间 线程 级别 类 ,日志实际内容不解析
grok {
match => {
"message" => "%{TIMESTAMP_ISO8601:timestamp}\s+%{DATA:thread}\s+%{DATA:level}\s+%{DATA:class}\s+"
}
}
#用日志输出时间替换掉ES的@timestamp
date {
match => ["timestamp", "ISO8601"]
target => "@timestamp"
}
#节流过滤,打节流tag,output.email根据tag判断是否发送ERROR日志邮件
if [type] == "loanapi" and [level] == "ERROR" {
throttle {
period => 600
max_age => 1200
before_count => 4
key => "%{type}%{level}"
add_tag => "throttled"
}
}
}
output {
elasticsearch {
hosts => ["10.19.64.72:9200", "10.19.64.105:9200", "10.19.64.106:9200"] #value type is ARRAY
index => "%{type}-%{+YYYY.MM.dd}" #YYYY.MM.dd get from @timestamp field
flush_size => 2000 #value type is NUMBER,Default value is 500
idle_flush_time => 5 #value type is NUMBER,Default value is 1
}
#按type,level,tags判断是否发送ERROR日志邮件(此项为特殊要求,不建议用logstash进行日志发送,避免影响logstash的性能)
if [type] == "loanapi" and [level]== "ERROR" and "throttled" in [tags] {
email {
port => 465
address => "mail.xxx.com"
from => "logerror@xxx.com"
username => "xxxr"
password => "xxx"
authentication => "login"
contenttype => "text/plain; charset=UTF-8"
use_tls => true
subject => "ELK异常邮件:[%{[beat][hostname]}服务器]-[%{type}日志异常]"
to => "sss@qqq.com"
via => "smtp"
body => "%{message}"
}
}
}
五 、启动kibana

当加入了新的日志到ELK中时,可以在management中新建index,如下图



日志格式要求
目前线下java应用的日志输出组件有两个,logback和log4j,格式应满足如下要求,以便于接入生产ELK,方便开发能快速查看生产日志。
日志输出标准有如下建议请参考
1、请尽量使用log4j
2、日志文件编码格式:UTF-8,请不要使用默认
3、日志文件rotate:按天,单文件容量不超过50MB
4、日志输出的时间格式使用ISO8601(如yyyy-MM-dd HH:mm:ss.SSS),%d或%date默认输出格式为ISO8601
5、日志输出的字段分隔符使用tab,替换空格
6、日志输出字段顺序:date thread level class message
7、日志输出Pattern建议如下:
8、Logback组件pattern:%date [%thread] %-5level [%logger] - %msg%n
9、Log4j组件pattern:%d [%t] %-5p [%c] - %m%n
10、日志路径微服务日志路径为/opt/jarapp/logs tomcat日志路径为/opt/tomcat/logs
ELK的搭建以及使用的更多相关文章
- ELK+redis搭建nginx日志分析平台
ELK+redis搭建nginx日志分析平台发表于 2015-08-19 | 分类于 Linux/Unix | ELK简介ELKStack即Elasticsearch + Logstas ...
- 使用elk+redis搭建nginx日志分析平台
elk+redis 搭建nginx日志分析平台 logstash,elasticsearch,kibana 怎么进行nginx的日志分析呢?首先,架构方面,nginx是有日志文件的,它的每个请求的状态 ...
- linux下利用elk+redis 搭建日志分析平台教程
linux下利用elk+redis 搭建日志分析平台教程 http://www.alliedjeep.com/18084.htm elk 日志分析+redis数据库可以创建一个不错的日志分析平台了 ...
- ELK初学搭建(kibana)
ELK初学搭建(kibana) elasticsearch logstash kibana ELK初学搭建 kibana 1.环境准备 centos6.8_64 mini IP:192.168.10. ...
- ELK初学搭建(elasticsearch)
ELK初学搭建(elasticsearch) elasticsearch logstash kibana ELK初学搭建 elasticsearch 1.环境准备 centos6.8_64 mini ...
- ELK初学搭建(logstash)
ELK初学搭建(logstash) elasticsearch logstash kibana ELK初学搭建 logstash 1.环境准备 centos6.8_64 mini IP:192.168 ...
- ELK平台搭建(上)
一.目的 为指导在Centos6.8系统下搭建标准ELK平台的工作. 二.定义 Elasticsearch Logstash Kibana结合Redis协同工作. 三.适用范围 适用于运营维护组运维工 ...
- ELK 环境搭建4-Kafka + zookeeper
一.安装前准备 1.节点 192.168.30.41 192.168.30.42 192.168.30.43 2.操作系统: Centos7.5 3.安装包 a.java8: jdk-8u181-li ...
- ELK 环境搭建3-Logstash
一.Logstash是一款轻量级的日志搜集处理框架,可以方便的把分散的.多样化的日志搜集起来,并进行自定义的处理,然后传输到指定的位置,比如某个服务器或者文件或者中间件. 二.搭建 1.因为要涉及到收 ...
- ELK 环境搭建2-Kibana
一.安装前准备 1.节点 192.168.30.41 2.操作系统: Centos7.5 3.安装包 a.java8: jdk-8u181-linux-x64.tar.gz b.Kibana kiba ...
随机推荐
- ...扩展运算符+rest参数+call/apply/bind
之前在set,map里面有提过扩展运算符的概念,但是今天偶然遇到一个问题,类似于扩展运算符的经典用法,突然发现对其了解不是很深,所以再来整理一下扩展运算符的相关知识. 重点:扩展运算符内部调用的是数据 ...
- python环境下安装virtualenv,virtualenvwrapper
在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题: 亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难. 此时,我们需要对于不同的工程使用 ...
- SpringBoot 使用定时任务动态执行任务
import com.patient.core.adapter.CorsFilter; import org.mybatis.spring.annotation.MapperScan; import ...
- 第八周学习总结&实验报告六
实验总结 :类的继承 实验目的 理解异常的基本概念: 掌握异常处理方法及熟悉常见异常的捕获方法. 实验要求 : 练习捕获异常.声明异常.抛出异常的方法.熟悉try和catch子句的使用. 掌握自定义异 ...
- 使用SNMP监控服务器运行情况
系统监测的基本概念及分类: a.系统监测的概述: 如何对现有IT架构的整体以及细节运行情况进行科学.系统和高效地监测是目前各企业运维和管理部门一项非常重要的工作内容.随着当前企业IT环境中服务器.应用 ...
- Vimdiff 使用
what is vimdiff 在类nuix平台,我们希望对文件之间的差异之间快速定位,希望能够很容易的进行文件合并……. 可以使用Vim提供的diff模式,通常称作vimdiff,就是这样一个能满足 ...
- Android内存Activity泄露:Handler与Threads
Java使用有向图机制,通过GC自动检查内存中的对象(什么时候检查由虚拟机决定),如果GC发现一个或一组对象为不可到达状态,则将该对象从内存中回收.也就是说,一个对象不被任何引用所指向,则该对象会在被 ...
- 开源控件slidingmenu的使用
在github.com网站搜索slidingmenu后https://github.com/jfeinstein10/SlidingMenu 下载demo,导入library到你的项目中,添加到你项目 ...
- 十二:jinja2模板中使用url_for
在页面中,有点击跳转到另一个地址的时候,可以使用url_for来指定要跳转的视图函数:{{ url_for('view_function') }} 如果该视图需要接收参数
- HttpRunnerManager(二)--使用
参考资料:https://sutune.me/2018/08/05/httprunner/