ELK:日志收集分析平台

目录

  • 简介
  • 环境说明
  • Filebeat 部署
    • web上采集配置文件
    • app上采集配置文件
  • Redis 部署
    • 配置文件
  • Logstash 部署
  • Elasticsearch 集群部署
    • 配置文件
  • Kibana 部署
  • 参考文档

简介

ELK是一个日志收集分析的平台,它能收集海量的日志,并将其根据字段切割。一来方便供开发查看日志,定位问题;二来可以根据日志进行统计分析,通过其强大的呈现能力,挖掘数据的潜在价值,分析重要指标的趋势和分布等,能够规避灾难和指导决策等。ELK是Elasticsearch公司出品的一组套件,官方站点:https://www.elastic.co,本文中ELK需要用的组件有Elasticsearch、Logstash、Kibana、Filebeat(Beats组合中的一个),主要介绍该集群的建设部署以及一些注意事项,希望对需要的小伙伴有所帮助,对于文中错误,欢迎批评指正。

环境说明

下面是本文的逻辑架构图,其中filebeat为采集日志的客户端,其安装在产生日志的机器上,收集的日志插入到redis消息队列中,logstash从redis取出数据并做相应的处理,其中包括字段拆分定义,并将数据输出到ES集群中,ES集群将数据处理、分片、索引等,最终kibana作为页面展示,将从ES集群取出数据做分析、统计、处理、展示,当然,其中有用到x-pack插件做数据分析、统计和展现(就是一些漂亮的实时图表)。

  • 本文采用软件版本均为6.3.

Filebeat 部署

yum -y install epel-release

mkdir /data/soft -pv

cd /data/soft/

yum install wget vim -y

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.3.1-x86_64.rpm

yum install filebeat-6.3.1-x86_64.rpm -y

web上采集配置文件

cat > /etc/filebeat/filebeat.bash <<"EOF"
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/crmwww-dev-access.log
    - /var/log/nginx/manager2018crm-dev-access.log
    - /var/log/nginx/hybrid-dev-access.log
    - /var/log/nginx/cfdwww-dev-access.log
    - /var/log/nginx/manager2018cfd-dev-access.log
    - /var/log/nginx/market2018cfd-dev-access.log
    - /var/log/nginx/api2018cfd-dev-access.log
  fields:
    project: cfds
    env: dev
    role: web
    logtype: access
    ip: 192.168.0.152
  fields_under_root: true
#采集信息追加字段,便于分组,fields_under_root指定字段的访问模式为直接访问,不必使用fields.project

- type: log
  enabled: true
  paths:
    - /var/log/nginx/manager2018crm-dev-error.log
    - /var/log/nginx/manager2018cfd-dev-error.log
    - /var/log/nginx/market2018cfd-dev-error.log
    - /var/log/nginx/cfdwww-dev-error.log
    - /var/log/nginx/hybrid-dev-error.log
    - /var/log/nginx/crmwww-dev-error.log
    - /var/log/nginx/api2018cfd-dev-error.log
  fields:
    project: cfds
    env: dev
    role: web
    logtype: error
    ip: 192.168.0.152
  fields_under_root: true

#将日志输出到redis
output.redis:
  hosts: ["redis.glinux.top"]
  key: "cfds"
  db: 0
  password: "123456"
  timeout: 15

#可通过以下配置测试输出结果,输入内容在/tmp/filebeat/filebeat
#output.file:
##  path: "/tmp/filebeat"
##  filename: filebeat

EOF

app上采集配置文件

cat > /etc/filebeat/filebeat.bash <<"EOF"
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /data/logs/crm/error/crm.log
  fields:
    project: cfds
    env: dev
    role: crm
    logtype: error
    ip: 192.168.0.155
  fields_under_root: true
 #处理多行数据,如果不以时间开头的行归为上一行的数据,接到上一行数据后面
  multiline.pattern: ‘^[0-9]{4}-[0-9]{2}-[0-9]{2}‘
  multiline.negate: true
  multiline.match: after
  multiline.timeout: 10s

- type: log
  enabled: true
  paths:
    - /data/logs/crm/info/crm.log
  fields:
    project: cfds
    env: dev
    role: crm
    logtype: info
    ip: 192.168.0.155
  fields_under_root: true
  multiline.pattern: ‘^[0-9]{4}-[0-9]{2}-[0-9]{2}‘
  multiline.negate: true
  multiline.match: after
  multiline.timeout: 10s

output.redis:
  hosts: ["redis.glinux.top"]
  key: "cfds"
  db: 0
  password: "123456"
  timeout: 15

#可通过以下配置测试输出结果,输入内容在/tmp/filebeat/filebeat
#output.file:
##  path: "/tmp/filebeat"
##  filename: filebeat

EOF

filebeat test config /etc/filebeat/filebeat.yml #测试配置文件

systemctl enable filebeat

systemctl restart filebeat

Redis 部署

yum -y install epel-release

yum -y install redis

配置文件

仅需要添加密码认证即可

cat >> /etc/redis.conf << "EOF"
requirepass "123456"

systemctl enable redis

systemctl start redis

Logstash 部署

yum -y install epel-release

mkdir /data/soft -pv

cd /data/soft/

yum install wget vim -y

wget https://artifacts.elastic.co/downloads/logstash/logstash-6.3.1.rpm

yum install logstash-6.3.1.rpm -y

rpm -ql logstash #查看安装路径

cat > /etc/profile.d/logstash.sh <<"EOF"
export PATH=/usr/share/logstash/bin/:$PATH
EOF

. /etc/profile.d/logstash.sh #读取环境变量

yum -y install java-1.8.0-openjdk

cat > /etc/logstash/logstashserver.conf <<"EOF"
input {
  redis {
    host => ["127.0.0.1"]
    key => "ftms"
    port => 6379
    password => "123456"
    data_type => ["list"]
  }
  redis {
    host => ["127.0.0.1"]
    key => "cfds"
    port => 6379
    password => "123456"
    data_type => ["list"]
  }
}
filter {
  if [role] == "web" and [logtype] == "access" {
    grok {
      patterns_dir => ["/usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns"]
      match => ["message" , "%{NGINXACCESS}"]
    }
  }
  if [role] == "web" and [logtype] == "error" {
    grok {
      patterns_dir => ["/usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns"]
      match => ["message" , "%{NGINXERROR}"]
    }
  }
  else {
    grok {
      patterns_dir => ["/usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns"]
      match => ["message" , "%{TIMESTAMP_ISO8601:logdatetime} %{LOGLEVEL:level} \[%{DATA:thread}\] %{JAVACLASS:class} \[%{JAVAFILE:file}(?::%{NUMBER:line})?\] - %{GREEDYDATA:message}"]
    }
  }
}
output {
  elasticsearch {
    hosts => ["http://192.168.30.36:9200","http://192.168.30.37:9200","192.168.30.38:9200"]
    index => "%{project}-%{env}-%{role}-%{logtype}-%{+YYYY.MM.dd}"
  }
}
EOF

logstash -f /etc/logstash/logstashserver.conf -t #测试配置文件是否有误

systemctl enable logstash

systemctl restart logstash

Elasticsearch 集群部署

yum install java-1.8.0-openjdk -y

yum -y install epel-release

mkdir /data/soft -pv

cd /data/soft/

yum install wget vim -y

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.1.rpm

yum install elasticsearch-6.3.1.rpm -y

rpm -ql elasticsearch

cat > /etc/profile.d/elasticsearch.sh <<"EOF"
export PATH=/usr/share/elasticsearch/bin/:$PATH
EOF

. /etc/profile.d/elasticsearch.sh

配置文件

node1

cat > /etc/elasticsearch/elasticsearch.yml <<"EOF"
cluster.name: logs
node.name: node-36-2
#node.master: false
#node.data: true
path.data: /data/server/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["192.168.30.36","192.168.30.37","192.168.30.38"]
discovery.zen.minimum_master_nodes: 2

node2

cat > /etc/elasticsearch/elasticsearch.yml <<"EOF"
cluster.name: logs
node.name: node-37-1
#node.master: false
#node.data: true
path.data: /data/server/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["192.168.30.36","192.168.30.37","192.168.30.38"]
discovery.zen.minimum_master_nodes: 2

node3

cat > /etc/elasticsearch/elasticsearch.yml <<"EOF"
cluster.name: logs
node.name: node-38-3
#node.master: false
#node.data: true
path.data: /data/server/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["192.168.30.36","192.168.30.37","192.168.30.38"]
discovery.zen.minimum_master_nodes: 2

systemctl enable elasticsearch

systemctl start elasticsearch

systemctl status elasticsearch

curl ‘localhost:9200/_cat/nodes?v‘ #查看集群状态

Kibana 部署

yum -y install epel-release

mkdir -pv /data/soft

cd /data/soft/

yum install wget vim -y

wget https://artifacts.elastic.co/downloads/kibana/kibana-6.3.1-x86_64.rpm

yum install kibana-6.3.1-x86_64.rpm -y

cat > /etc/kibana/kibana.yml <<"EOF"
server.host: "0.0.0.0"
elasticsearch.url: "http://escluster.glinux.top:9200"
EOF

systemctl enable kibana.service

systemctl start kibana.service

端口转发,普通程序不能监听在1024以下的端口,解决方法

cat > /etc/sysctl.conf <<"EOF"
net.ipv4.ip_forward = 1 #重新加载 

sysctl -p /etc/sysctl.conf

iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-port 5601

参考文档

原文地址:https://www.cnblogs.com/William-Guozi/p/elk.html

时间: 2024-08-28 23:10:09

ELK:日志收集分析平台的相关文章

结合Docker快速搭建ELK日志收集分析平台

结合Docker快速搭建ELK日志收集分析平台 2017-03-27 09:39 阅读 172 评论 0 作者:马哥Linux运维-Eason ELK Stack ELK (Elasticsearch + Logstash + Kibana),是一个开源的日志收集平台,用于收集各种客户端日志文件在同一个平台上面做数据分析. Introduction Elasticsearch, 基于json分析搜索引擎Logstash, 动态数据收集管道Kibana, 可视化视图将elasticsearh所收集

ELK日志收集分析系统配置

ELK是日志收益与分析的利器. 1.elasticsearch集群搭建 略 2.logstash日志收集 我这里的实现分如下2步,中间用redis队列做缓冲,可以有效的避免es压力过大: 1.n个agent对n个服务的log做日志收集(1对1的方式),从日志文件解析数据,存入broker,这里用的是redis的发布订阅模式的消息队列,当然你可以选用kafka,redis比较方便: 3.indexer做日志汇总,从redis队列中拿数据入es: 下面给出agent和index的配置示例: 1.dr

Kubernetes运维之使用ELK Stack收集K8S平台日志

kubernetes运维之使用elk Stack收集k8s平台日志目录: 收集哪些日志 elk Stack日志方案 容器中的日志怎么收集 k8S平台中应用日志收集 一.收集哪些日志 ? k8s系统的组件日志 比如kubectl get cs下面的组件 master节点上的controller-manager,scheduler,apiservernode节点上的kubelet,kube-proxy? k8s Cluster里面部署的应用程序日志 标准输出 日志文件elk Stack日志方案,改怎

FILEBEAT+ELK日志收集平台搭建流程

filebeat+elk日志收集平台搭建流程 1.         整体简介: 模式:单机 平台:Linux - centos - 7 ELK:elasticsearch.logstash.kibana三款开源软件的集合. FILEBEAT:代替logstash的采集功能,轻量.耗用小. 目前收集的有nginx日志.java日志[单行|多行]. 都是通过在客户端的生成日志配置文件中定义好初步json格式,然后利用filebeat采集到logstash,存储到elasticsearch,最后通过k

elk日志收集之rsyslog软连接监控文件深度坑

业务中通过rsyslog监控本地文件收集了一些redis和mc的慢日志,推到elk集群分析,这些日志一天一个文件,每晚零点5分通过计划任务用软连接的方式将新的文件固定到指定文件下,但是最近发现日志丢了很多,分析中发现了一个深坑,先说下现有的配置: ....................... 浏览全部请点击运维网咖社地址:elk日志收集之rsyslog软连接监控文件深度坑

logstash日志收集分析系统elasticsearch&kibana

logstash日志收集分析系统Logstash provides a powerful pipeline for storing, querying, and analyzing your logs. When using Elasticsearch as a backend data store and Kibana as a frontend reporting tool, Logstash acts as the workhorse. It includes an arsenal of

elkb+redis建立日志收集分析系统

一.ELKB说明 elastic提供了一套非常高级的工具ELKB来满足以上这几个需求.ELKB指的是用于日志分析或者说数据分析的四个软件,各自拥有独立的功能又可以组合在一起.先来简单介绍一下这四个软件. Elastic Search: 从名称可以看出,Elastic Search 是用来进行搜索的,提供数据以及相应的配置信息(什么字段是什么数据类型,哪些字段可以检索等),然后你就可以自由地使用API搜索你的数据. Logstash:.日志文件基本上都是每行一条,每一条里面有各种信息,这个软件的功

日志收集分析系统架构

日志收集分析系统架构   一.部署架构 日志收集系统一般包括如图所示三层.Web服务器层,日志收集层,日志存储层.Web服务器层是日志的来源,一般部署web应用供用户访问,产生日志,该节点上一般需要部署日志收集程序的agent.日志收集层手机web服务器产生的日志传输给日志存储层,存储层一般使用分布式文件系统HDFS,日志可以存储在hdfs上或者hbase上. 以scribe作为日志收集系统架构,scribe分为scribe agent和scribe server 以kafka作为日志收集系统架

syslog-ng日志收集分析服务搭建及配置

syslog-ng日志收集分析服务搭建及配置:1.网上下载eventlog_0.2.12.tar.gz.libol-0.3.18.tar.gz.syslog-ng_3.3.5.tar.gz三个软件: 2.解压及安装服务端: [[email protected] tools]# tar xf eventlog_0.2.12.tar.gz [[email protected] tools]# cd eventlog-0.2.12/ [[email protected] eventlog-0.2.12