ELK日志平台搭建

ELK日志平台搭建

整体架构

整体架构主要分为5个模块,分别提供不同的功能:

Filebeat:轻量级数据收集引擎。基于原先 Logstash-fowarder 的源码改造出来。是 ELK Stack 在 Agent 的第一选择。<br><br>
Kafka:数据缓冲队列。作为消息队列解耦了处理过程,同时提高了可扩展性。具有峰值处理能力,使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。<br><br>
Logstash:数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。<br><br>
Elasticsearch:分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点。可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 基于 Lucene 开发,现在使用最广的开源搜索引擎之一。<br><br>
Kibana:可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。

版本说明

系统版本: CentOS 7.2
Filebeat: 6.0.1
Kafka: 2.11-1.0.0
Logstash: 6.0.1
Elasticsearch: 6.0.1
Kibana: 6.0.1
JDK: 1.8.0_171
友情提示:最好使用对应对的版本进行配置

准备工作

1. 服务器说明

filebeat 部署在每一台线上应用的机器上<br><br>
2. 环境准备
由于Filebeat、Elasticsearch、Logstash、Kibana均不能以root账号运行;所以我们需要创建ELK专用用户,并且修改ELK相关的目录的权限
创建elk用户:useradd elk
修改权限:chown -R elk:elk /usr/local/[目录]

  • JDKyum install -y java-1.8.0-openjdk
  • 修改文件限制
vi /etc/security/limits.conf
# 增加内容
* soft nofile 65536
* hard nofile 65536
* soft nproc 2048
* hard nproc 4096
  • 调整进程数
vi /etc/security/limits.d/20-nproc.conf
# 调整成以下配置
*          soft    nproc     4096
root       soft    nproc     unlimited
  • 调整虚拟内存&最大并发连接

    vi /etc/sysctl.conf
    # 增加的内容
    vm.max_map_count=655360
    fs.file-max=655360
    # 保存后,输入命令使其生效:sysctl -p

    3. 开放相应的端口

    # 增加端口
    firewall-cmd --add-port=9200/tcp --permanent
    firewall-cmd --add-port=9300/tcp --permanent
    firewall-cmd --add-port=5601/tcp --permanent
    # 重新加载防火墙规则
    firewall-cmd --reload

    搭建过程

    @(使用elk用户进行搭建)

    Filebeat

    filebeat支持收集本地目录的应用日志,并输出日志到kafka集群中

解压:

tar zxf filebeat-6.0.1-linux-x86_64.tar.gz
mv filebeat-6.0.1 /usr/local/filebeat
cd /usr/local/filebeat

修改配置:

vi /usr/local/filebeat/filebeat.yml

filebeat.prospectors:
- type: log
  enabled: true
  paths:
    - /home/logs/erp-web/sys.log
  # 多行日志配置
  multiline.pattern: ‘^[0-9]{4}-[0-9]{2}-[0-9]{2}‘
  multiline.negate: true
  multiline.match: after
  multiline.timeout: 10s
  # 定义kafka.topics名称
  fields:
    log_topics: erp-web

processors:
  # 去除filebeat不需要显示的字段
  - drop_fields:
      fields: ["beat.name", "beat.version", "offset", "prospector.type", "source"]

output.kafka:
  enabled: true
  hosts: ["10.1.1.54:9092","10.1.1.55:9092","10.1.1.56:9092"]
  topic: "%{[fields][log_topics]}"

使用elk用户启动:

$ ./filebeat -e -c filebeat.yml
# 如果没有报错的话,使用下面的命令后台运行
$ nohup ./filebeat --e --c filebeat.yml &

Kafka

生产环境中 Kafka 集群节点数量建议为(2N + 1 )个,本次是 3 个节点的集群
ZK 集群建议采用 Kafka 自带,减少网络相关的因素干扰

解压:

tar zxf kafka_2.11-1.0.0.tgz
mv kafka_2.11-1.0.0 /usr/local/kafka
cd /usr/local/kafka

修改zookeeper配置:

vi config/zookeeper.properties

dataDir=/home/datas/zookeeper
clientPort=2181
maxClientCnxns=50
tickTime=2000
initLimit=10
syncLimit=5
server.54=10.1.1.54:2888:3888
server.55=10.1.1.55:2888:3888
server.56=10.1.1.56:2888:3888

Zookeeper data 目录下面添加 myid 文件,内容为代表 Zooekeeper 节点 id (54,55,56),并保证不重复

vi /home/datas/zookeeper/myid
54

启动zookeeper:

nohup bin/zookeeper-server-start.sh config/zookeeper.properties &

修改kafka配置:

vi config/server.properties

broker.id=54
port=9092
host.name=10.1.1.54
num.replica.fetchers=1
queued.max.requests=16
fetch.purgatory.purge.interval.requests=100
producer.purgatory.purge.interval.requests=100
delete.topic.enable=true
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://10.1.1.54:9092
num.network.threads=8
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/home/logs/kafka-logs
num.partitions=3
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=10.1.1.54:2181,10.1.1.55:2181,10.1.1.56:2181
zookeeper.connection.timeout.ms=6000
zookeeper.sync.time.ms=2000
group.initial.rebalance.delay.ms=0

启动kafka:

nohup bin/kafka-server-start.sh config/server.properties &

kafka常用命令:

# 创建topic
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic kafka-test
# 查看创建的topic
bin/kafka-topics.sh -list -zookeeper localhost:2181
# 删除topic
bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic xxx
# 生产消息测试
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic xxx
# 消费消息测试
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic xxx --from-beginning

推荐使用kafka-manager进行管理kafka集群
可以在 Github 上下载安装:https://github.com/yahoo/kafka-manager

Logstash

解压:

tar zxf logstash-6.0.1.tar.gz
mv logstash-6.0.1 /usr/local/logstash
cd /usr/local/logstash

修改配置:

vi conf/erp-web.conf

input {
   kafka {
      bootstrap_servers => "10.1.1.54:9092,10.1.1.55:9092,10.1.1.56:9092"
      group_id => "erp-web"
      topics => ["erp-web"]
      consumer_threads => 4
      decorate_events => true
      codec => "json"
      type => "erp-web"
   }
}
filter {
   grok {
       patterns_dir => [ "/usr/local/logstash/patterns" ]
       match => { "message" => "%{LOG_FAT}" }
       overwrite => [ "message" ]
   }
   date {
      match => ["logtime","ISO8601", "yyyy-MM-dd‘T‘HH:mm:ss.SSS" ]
      target => "@timestamp"
      timezone => "Asia/Shanghai"
   }
   mutate {
      remove_field => ["fields","prospector","@version"]
   }
}
output {
   if [type] == "erp-web" {
      elasticsearch {
         hosts => ["10.1.1.54:9200","10.1.1.55:9200","10.1.1.56:9200"]
         index => "erp-web-%{+YYYY-MM-dd}"
      }
      #stdout { codec => rubydebug }
   }
}
# 上面使用了自定义正则匹配的,添加下面的配置
vi patterns/applog

LOG_TIME %{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:?%{MINUTE}(?::?%{SECOND})
SPACE \s*
LOG_THREAD [A-Za-z0-9\-\[\]\.\:]+
LOG_LEVEL ([Aa]lert|ALERT|[Tt]race|TRACE|[Dd]ebug|DEBUG|[Nn]otice|NOTICE|[Ii]nfo|INFO|[Ww]arn?(?:ing)?|WARN?(?:ING)?|[Ee]rr?(?:or)?|ERR?(?:OR)?|[Cc]rit?(?:ical)?|CRIT?(?:ICAL)?|[Ff]atal|FATAL|[Ss]evere|SEVERE|EMERG(?:ENCY)?|[Ee]merg(?:ency)?)
LOG_CLASS ([a-zA-Z0-9-]+\.)+[A-Za-z0-9\(\)]+
LOG_MSG .*
LOG_FAT %{TIMESTAMP_ISO8601:logtime}%{SPACE}%{LOG_THREAD:thread}%{SPACE}%{LOG_LEVEL:level}%{SPACE}%{LOG_CLASS:class}%{SPACE}-%{SPACE}%{LOG_MSG:message}

使用elk用户启动:

# 测试配置语法是否正确
bin/logstash -f config/erp-web.conf -t
# 指定配置文件启动
nohup bin/logstash -f config/erp-web.conf &
# 多配置文件启动:
nohup bin/logstash -f config/ &

Elasticsearch

解压:

tar zxf elasticsearch-6.0.1.tar.gz
mv elasticsearch-6.0.1 /usr/local/elasticsearch
cd /usr/local/elasticsearch

修改配置:

vi config/elasticsearch.yml   # 统一下面配置,修改部分会给出说明

cluster.name: btr-es01
node.name: node-54      # 节点名不能相同
node.master: true
node.data: true
path.data: /home/apps/elasticsearch
path.logs: /home/logs/elasticsearch
network.host: 0.0.0.0
network.publish_host: 10.1.1.54    # host也需要修改对用的IP
http.port: 9200
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["10.1.1.54", "10.1.1.55", "10.1.1.56"]
discovery.zen.minimum_master_nodes: 2
http.cors.enabled: true
http.cors.allow-origin: "*"

切换elk启动:

$ bin/elasticsearch
# 如果没有报错的话,使用下面的命令后台运行
nohup bin/elasticsearch &

测试结果:
浏览器输入:http://10.1.1.54:9200/ ,出现一下信息说明配置成功

{
"name" : "node-54",
"cluster_name" : "btr-es01",
"cluster_uuid" : "qAsLXddUQDSoOg-I2eT5AQ",
"version" : {
"number" : "6.0.1",
"build_hash" : "601be4a",
"build_date" : "2017-12-04T09:29:09.525Z",
"build_snapshot" : false,
"lucene_version" : "7.0.1",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}

其他两台机器类似上面的配置,搭建好了elasticsearch分布式集群!

Kibana

解压:

tar zxf kibana-6.0.1-linux-x86_64.tar.gz
mv kibana-6.0.1-linux-x86_64 /usr/local/kibana
cd /usr/local/kibana

修改配置:

vi config/kibana.yml

server.port: 5601
server.host: 10.1.1.54
elasticsearch.url: "http://10.1.1.54:9200"

启动:

nohup bin/kibana &

浏览器访问: http://10.1.1.54:5601

大功告成!

原文地址:http://blog.51cto.com/11924224/2158203

时间: 2024-07-31 00:30:22

ELK日志平台搭建的相关文章

ELK日志平台

什么是ELK? ELK指的是ElasticSearch,Logstash,Kibana这三个工具的首字母缩写,中文指南很详细,按其步骤来,入门基本没啥问题. 解决什么问题? 公司产品EDI平台的主要任务就是将各个数据源的文件信息处理后再发送第三方,没有实时监控,文件发送不成功时,运维相当被动. ELK的强项就是实时的日志分析,通过对日志文件的分析(秒级)对比,及时将异常情况通知运维. 计划步骤如下: 1)制定日志规范,在程序中增加日志,记录处理过程. 2)部署Logstash监控日志文件. 3)

ELK日志平台之ElasticSearch

一.ELKStack简介 Elstaicsearch:日志存储和搜索 logstash:日志收集 kibana:日志展示 ELK架构示意图: 二.ELK安装 环境准备 IP 主机名 操作系统 192.168.56.11 linux-node1 centos7 192.168.56.12 linux-node2 centos7 1.Elasticsearch安装 安装JDK [[email protected] ~]# yum install -y java [[email protected] 

统一日志平台-搭建

随着网络规模的扩大,各种服务器.交换机.路由器.防火墙等设备也越来越多,日常管理中出现故障时常常都需要登录到这些设备上查看日志,但是由于设备繁多,当故障涉及多个设备时,操作起来就非常繁琐:其次,部分设备上的日志采用覆盖的方式存放,有的个把月就没有了,非常不便于日后的使用.所以综合对比了一些软件后,选择使用syslog来作集中日志收集平台. 软件:kiwi syslog server 9.4.1 (www.kiwisyslog.com) 平台:windows server 2003R2 1.软件安

ELK日志平台之kibana

一.ELKStack简介 Elstaicsearch:存储和搜索 logstash:收集 kibana:展示.专门为ES设计的展示平台 二.ELK之kibana安装 环境准备 IP 主机名 操作系统 192.168.56.11 linux-node1 centos7 192.168.56.12 linux-node2 centos7 1.安装JDK [[email protected] ~]# yum install -y java [[email protected] ~]# java -ve

ELK日志平台---老男孩教育笔记

环境的困境(原因) 1.开发人员不能登录线上服务器查看相信日志: 2.各个系统都有日志,日志数据分散难以查找: 3.日志数据量大,查询速度慢,或者数据不够及时.(状态码 400 的 top10) 收集->存储->统计->报警... Elastic Search + Logstash +Kibana = ELK Stack 1.分布式全文搜索引擎.存储 2.日志收集(日志收集于某一处) 3.日志展示 安装过程: 一.Elastic Search (1).Import the Elastic

ELK日志平台----解耦配置文件

本文记录了三个配置文件: 第一个:all.conf 通过一个配置文件,配置输入输出,实例: 第二个:shipper.conf配置logstash收集日志内容到redis里: 第三个:indexer.conf配置logstash从redis里读取日志内容输出到Elasticsearch里. 第二个跟第三个配置解耦收集日志 ELK 解耦 logstash ---------->redis ---------->logstash -------->elasticsearch----------

ELK日志平台之Logstash

一.ELKStack简介 Elstaicsearch:存储和搜索 logstash:收集 kibana:展示 二.ELK----之Logstash安装 环境准备 IP 主机名 操作系统 192.168.56.11 linux-node1 centos7 192.168.56.12 linux-node2 centos7 在两台服务器上都安装logstash 1.JDK安装 安装JDK [[email protected] ~]# yum install -y java [[email prote

ELK 日志系统搭建配置

logstash是一个数据分析软件,主要目的是分析log日志.整一套软件可以当作一个MVC模型,logstash是controller层,Elasticsearch是一个model层,kibana是view层. 首先将数据传给logstash,它将数据进行过滤和格式化(转成JSON格式),然后传给Elasticsearch进行存储.建搜索的索引,kibana提供前端的页面再进行搜索和图表可视化,它是调用Elasticsearch的接口返回的数据进行可视化.logstash和Elasticsear

Elasticsearch+Kibana+Logstash 搭建日志平台

大型日志平台搭建 Java 环境部署 网上很多教程,此处只做出测试 java -version java version "1.7.0_45" Java(TM) SE Runtime Environment (build 1.7.0_45-b18) Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode) Elasticsearch 搭建 curl -O https://download.elasticsearch.