elk架构-搭建一个日志收集系统

一、日志收集端

1、nginx:nginx-1.16.1.tar.gz

为了kibana收集nginx日志获取字段,先将日志转化为json格式。格式样式如下:

log_format access_json ‘{"@timestamp":"$time_iso8601",‘
    ‘"host":"$server_addr",‘
    ‘"clientip":"$remote_addr",‘
    ‘"size":$body_bytes_sent,‘
    ‘"responsetime":$request_time,‘
    ‘"upstreamtime":"$upstream_response_time",‘
    ‘"upstreamhost":"$upstream_addr",‘
    ‘"http_host":"$host",‘
    ‘"uri":"$uri",‘
    ‘"domain":"$host",‘
    ‘"xff":"$http_x_forwarded_for",‘
    ‘"referer":"$http_referer",‘
    ‘"tcp_xff":"$proxy_protocol_addr",‘
    ‘"http_user_agent":"$http_user_agent",‘
    ‘"status":"$status"}‘;
access_log /apps/nginx/logs/access_json.log access_json;

2、安装完filebeat,安装包:filebeat-7.6.1-amd64.deb

修改它的配置文件,下面为修改的内容:

vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /usr/local/nginx/logs/access_json.log
  fields:
    type: nginx-access-log         #添加字段(fields.type)
    host: 192.168.134.191
 - type: log
   enabled: true
   fields:
     type: nginx-error-log
     host: 192.168.134.191
   paths:
     - /usr/local/nginx/logs/error.log
 - type: log
   enabled: true
   fields:
     type: nginx-syslog
     host: 192.168.134.191
   paths:
     - /var/log/syslog

二、日志转发端

1、配置 logstash 转发filebeat收集的nginx日志

软件包:logstash-7.6.1.deb,logstash需要Java环境。

安装jdk环境
apt-get update
apt-get install openjdk-8-jdk -y
dpkg -i logstash-7.6.1.deb
由于logstash要收集日志修改logstash的权限,或修改日志权限
vim /etc/logstash/startup.options
LS_USER=root
LS_GROUP=root
运行:
/usr/share/logstash/bin/system-install
systemctl restart logstash
[email protected]-1:/etc/logstash# ps -ef | grep logstash
root      10431      1 99 20:34 ?        00:00:06 /usr/bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC

2、logstash与filebeat建立联系

https://www.elastic.co/guide/en/logstash/current/plugins-inputs-beats.html

https://www.elastic.co/guide/en/beats/filebeat/current/logstash-output.html

filebeat的配置

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /usr/local/nginx/logs/access_json.log  #收集日志路径
  fields:    #用于kibana区分的字段
    type: nginx-access-log
    host: 192.168.134.191
- type: log
  enabled: true
  fields:
    type: nginx-error-log
    host: 192.168.134.191
  paths:
    - /usr/local/nginx/logs/error.log
- type: log
  enabled: true
  fields:
    type: nginx-syslog
    host: 192.168.134.191
  paths:
    - /var/log/syslog
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
setup.template.settings:
  index.number_of_shards: 1
setup.kibana:
processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~
  - add_docker_metadata: ~
  - add_kubernetes_metadata: ~
output.logstash:     #file收集的日志发给logstash
  hosts: ["192.168.134.193:5044", "192.168.134.194:5045"]  #支持多个logstash  loadbalance: true  worker: 5

logstash配置

[email protected]2:~# vim /etc/logstash/conf.d/log-redis.conf 

      password => "123456"
      data_type => "list"
      key => "nginx-access-log-192"
      codec => "json"

     }
     }
  if [fields][type] == "nginx-error-log" {
    redis {
      host => "192.168.134.194"
      port => "6379"
      db => "1"
      password => "123456"
      data_type => "list"
      key => "nginx-error-log-192"
     }
     }

  if [fields][type] == "nginx-syslog" {
    redis {
      host => "192.168.134.194"
      port => "6379"
      db => "1"
      password => "123456"
      data_type => "list"
      key => "nginx-syslog-192"

     }

}
}

验证是否存入redis

127.0.0.1:6379[1]> KEYS *
1) "nginx-error-log-192"
2) "nginx-syslog-192"
3) "nginx-access-log-192"

三、日志缓存

使用redis做日志缓存

配置redis

[[email protected] redis]# grep "^[a-Z]" redis.conf  #主要改动的地方
bind 0.0.0.0
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
requirepass 123456
save ""
rdbcompression no  #是否压缩
rdbchecksum no  #是否校验 

日志Json格式:

检测redis收集的日志的条数

#!/usr/bin/env python
#coding:utf-8
import redis
def redis_conn():     pool=redis.ConnectionPool(host="192.168.134.199",port=6379,db=1,password=123456)
     conn = redis.Redis(connection_pool=pool)
     data = conn.llen(‘tomcat-accesslog-1512‘)
     print(data)
redis_conn() 

四、日志提取和过滤

使用logstash日志提取,使用 [fields][type]进行过滤。

input {
    redis {
      host => "192.168.134.194"
      port => "6379"
      db => "1"
      password => "123456"
      data_type => "list"
      key => "nginx-access-log-192"
      codec => "json"
     }
    redis {
      host => "192.168.134.194"
      port => "6379"
      db => "1"
      password => "123456"
      data_type => "list"
      key => "nginx-error-log-192"
     }

    redis {
      host => "192.168.134.194"
      port => "6379"
      db => "1"
      password => "123456"
      data_type => "list"
      key => "nginx-syslog-192"

     }
}

output {
   if [fields][type] == "nginx-access-log" {
     elasticsearch {
      hosts => ["192.168.134.199:9200"]
      index =>  "nginx-access-log-192-%{+YYYY.MM.dd}"
    }

}
   if [fields][type] == "nginx-error-log" {
     elasticsearch {
      hosts => ["192.168.134.199:9200"]
      index =>  "nginx-error-log-192-%{+YYYY.MM.dd}"
    }
}
   if [fields][type] == "nginx-syslog" {
     elasticsearch {
      hosts => ["192.168.134.199:9200"]
      index =>  "nginx-syslog-192-%{+YYYY.MM.dd}"
    }
}
}

五、利用elasticsearch和kibana进行日志展示和搜索

配置 elasticsearch 服务器

安装包:elasticsearch-7.6.1-amd64.deb

[email protected]198:~#  grep "^[a-Z]"   /etc/elasticsearch/elasticsearch.yml
cluster.name: elasticsearch-test
node.name: node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["192.168.134.199", "192.168.134.198"]
cluster.initial_master_nodes: ["192.168.134.199", "192.168.134.198"]
gateway.recover_after_nodes: 1
action.destructive_requires_name: true
修改内存限制,并同步配置文件:
 vim /usr/lib/systemd/system/elasticsearch.service #修改内存限制 LimitMEMLOCK=infinity  #无限制使用内存
ss -nlt
LISTEN                0                      128                                                 *:9200                                             *:*
LISTEN                0                      128                                                 *:9300                                             *:*                    

通过浏览器访问 elasticsearch 服务端口:

安装 elasticsearch 插件之 head

1、docker 版本启动 head 插件

在 elasticsearch 5.x 版本以后不再支持直接安装 head 插件,而是需要通过启动 一个服务方式,git 地址:https://github.com/mobz/elasticsearch-head

docker run -d -p 9100:9100 mobz/elasticsearch-head:5  #for Elasticsearch 5.x

修改 elasticsearch 服务配置文件:

添加:
http.cors.enabled: true  #开启支持跨域访问
http.cors.allow-origin: "*" #指定允许访问范围 

测试:

安装并配置kibana:

安装包:kibana-7.6.1-amd64.deb

[email protected]198:~# grep -n "^[a-Z]" /etc/kibana/kibana.yml
2:server.port: 5601
7:server.host: "0.0.0.0"
28:elasticsearch.hosts: ["http://192.168.134.198:9200"]
115:i18n.locale: "zh-CN"

结果展示

kibana展示:

为了保证高可用

安装haproxy和keepalived。这里仅显示配置信息,完整高可用实验配置这里省略。

keepalived配置:
global_defs {
    notification_email {
    [email protected]
    }
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id ha1.example.com
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0

vrrp_mcast_group4 224.0.0.18
#vrrp_iptables
}

vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 80
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass stevenux
}
virtual_ipaddress {
    192.168.134.200 dev eth0 label eth0:0
}
}
haproxy配置
listen stats
    mode http
    bind 0.0.0.0:9999
    stats enable
    log global
    stats uri     /haproxy-status
    stats auth    haadmin:stevenux

listen elasticsearch_elasticsearch
  mode http
  balance roundrobin
  bind 192.168.134.200:19200
  server 192.168.134.199 192.168.134.199:9200 check inter 3s fall 3 rise 5
  server 192.168.134.198 192.168.134.198:9200 check inter 3s fall 3 rise 5

listen elasticsearch_kibana
  mode http
  balance roundrobin
  bind 192.168.134.200:56001
  server 192.168.134.199 192.168.134.199:5601 check inter 3s fall 3 rise 5
  server 192.168.134.198 192.168.134.198:5601 check inter 3s fall 3 rise 5

如何删除多余或过期的的index

#!/bin/bash
DATE=`date -d "2 days ago" +%Y.%m.%d`
index="
nginx-syslog-192-
nginx-error-log-192-
nginx-access-log-192-
"
for NAME in ${index};do
  FULL_NAME="$NAME-$DATE"
  curl -XDELETE http://192.168.134.200:19200/${FULL_NAME}
done

原文地址:https://www.cnblogs.com/lummg-DAY/p/12593988.html

时间: 2024-10-29 20:05:27

elk架构-搭建一个日志收集系统的相关文章

用ElasticSearch,LogStash,Kibana搭建实时日志收集系统

用ElasticSearch,LogStash,Kibana搭建实时日志收集系统 介绍 这套系统,logstash负责收集处理日志文件内容存储到elasticsearch搜索引擎数据库中.kibana负责查询elasticsearch并在web中展示. logstash收集进程收获日志文件内容后,先输出到redis中缓存,还有一logstash处理进程从redis中读出并转存到elasticsearch中,以解决读快写慢速度不一致问题. 官方在线文档:https://www.elastic.co

十九,基于helm搭建EFK日志收集系统

目录 EFK日志系统 一,EFK日志系统简介: 二,EFK系统部署 1,EFK系统部署方式 2,基于Helm方式部署EFK EFK日志系统 一,EFK日志系统简介: 关于系统日志收集处理方案,其实有很多种,因为之前使用ES比较多,所以也认为ELK是一个不错的解决方案,ELK(Elasticsearch + Logstash + Kibana)来管理日志. Kubernetes 也要实现在整个集群级别收集和聚合日志,以便用户可以从单个仪表板监控整个集群,其常用的架构形式之一 一种流行的开源解决方案

elasticsearch + logstash + kibana 搭建实时日志收集系统【原创】

实时日志统一收集的好处: 1.快速定位集群中问题机器 2.无需下载整个日志文件(往往比较大,下载耗时多) 3.可以对日志进行统计 a.发现出现次数最多的异常,进行调优处理 b.统计爬虫ip c.统计用户行为,做聚类分析等 基于上面的需求,我采用了 ELK(elasticsearch + logstash + kibana)的方案,安装方法请到他们的官网:https://www.elastic.co/ 上面查询,这里我主要讲讲我遇到的问题. ??????1.LVS 分发UDP请求不成功的问题???

基于Flume的美团日志收集系统(一)架构和设计【转】

美团的日志收集系统负责美团的所有业务日志的收集,并分别给Hadoop平台提供离线数据和Storm平台提供实时数据流.美团的日志收集系统基于Flume设计和搭建而成. <基于Flume的美团日志收集系统>将分两部分给读者呈现美团日志收集系统的架构设计和实战经验. 第一部分架构和设计,将主要着眼于日志收集系统整体的架构设计,以及为什么要做这样的设计. 第二部分改进和优化,将主要着眼于实际部署和使用过程中遇到的问题,对Flume做的功能修改和优化等. 1 日志收集系统简介 日志收集是大数据的基石.

基于Flume的美团日志收集系统(一)架构和设计

来自:美团技术博客 http://tech.meituan.com/mt-log-system-arch.html 美团的日志收集系统负责美团的所有业务日志的收集,并分别给Hadoop平台提供离线数据和Storm平台提供实时数据流.美团的日志收集系统基于Flume设计和搭建而成. <基于Flume的美团日志收集系统>将分两部分给读者呈现美团日志收集系统的架构设计和实战经验. 第一部分架构和设计,将主要着眼于日志收集系统整体的架构设计,以及为什么要做这样的设计. 第二部分改进和优化,将主要着眼于

基于Flume的美团日志收集系统(二)改进和优化

问题导读: 1.Flume-NG与Scribe对比,Flume-NG的优势在什么地方? 2.架构设计考虑需要考虑什么问题? 3.Agent死机该如何解决? 4.Collector死机是否会有影响? 5.Flume-NG可靠性(reliability)方面做了哪些措施? 美团的日志收集系统负责美团的所有业务日志的收集,并分别给Hadoop平台提供离线数据和Storm平台提供实时数据流.美团的日志收集系统基于Flume设计和搭建而成. <基于Flume的美团日志收集系统>将分两部分给读者呈现美团日

ELK+kafka构建日志收集系统

ELK+kafka构建日志收集系统 原文  http://lx.wxqrcode.com/index.php/post/101.html 背景: 最近线上上了ELK,但是只用了一台Redis在中间作为消息队列,以减轻前端es集群的压力,Redis的集群解决方案暂时没有接触过,并且Redis作为消息队列并不是它的强项:所以最近将Redis换成了专业的消息信息发布订阅系统Kafka, Kafka的更多介绍大家可以看这里: 传送门 ,关于ELK的知识网上有很多的哦, 此篇博客主要是总结一下目前线上这个

Flume日志收集系统架构详解--转

2017-09-06 朱洁 大数据和云计算技术 任何一个生产系统在运行过程中都会产生大量的日志,日志往往隐藏了很多有价值的信息.在没有分析方法之前,这些日志存储一段时间后就会被清理.随着技术的发展和分析能力的提高,日志的价值被重新重视起来.在分析这些日志之前,需要将分散在各个生产系统中的日志收集起来.本节介绍广泛应用的Flume日志收集系统. 一.概述 Flume是Cloudera公司的一款高性能.高可用的分布式日志收集系统,现在已经是Apache的顶级项目.同Flume相似的日志收集系统还有F

ELK之方便的日志收集、搜索、展示工具

大家在做分部署系统开发的时候是不是经常因为查找日志而头疼,因为各服务器各应用都有自己日志,但比较分散,查找起来也比较麻烦,今天就给大家推荐一整套方便的工具ELK,ELK是Elastic公司开发的一整套完整的日志分析技术栈,它们是Elasticsearch,Logstash,和Kibana,简称ELK.Logstash做日志收集分析,Elasticsearch是搜索引擎,而Kibana是Web展示界面. 1.日志收集分析Logstash LogstashLogstash 是一个接收,处理,转发日志