【网络架构】ELK

目录

一、ELK介绍

1.1 ELK是什么

1.2 Elasticsearch

1.3 Logstash

1.4 Kibana

1.5 为什么使用ELK

二、ELK原理

2.1 工作原理

2.2 ELK的应用架构图

三、ELK的安装部署

3.1 环境部署

3.2 前期环境

3.3 安装Elasticsearch

3.3.1 修改配置

3.3.2 查看节点信息

3.4 安装Logstash

3.4.1 安装服务

3.4.2 使用Logstash

3.4.3 对接elasticsearch

3.5 安装kibana

四、Logstash配合其他软件

4.1 收集nginx日志

4.1.1 环境介绍

4.1.2 配置

4.2 收集tomcat日志

4.2.1 环境介绍

4.2.2 配置

4.3 使用Redis接收tomcat日志

4.3.1 环境介绍

4.3.2 配置

4.3.3 其他logstash服务器从redis读取数据


一、ELK介绍

1.1 ELK是什么

通俗来讲,ELK 是由 Elasticsearch、Logstash、Kibana 三个开源软件的组成的一个组合体,ELK 是 elastic 公司研发的一套完整的日志收集、分析和展示的企业级解决方案,在这三个软件当中,每个软件用于完成不同的功能,ELK 又称为ELK stack,官方域名为 elastic.co,ELK stack 的主要优点有如下几个:处理方式灵活: elasticsearch 是实时全文索引,具有强大的搜索功能配置相对简单:elasticsearch 的 API 全部使用 JSON 接口,logstash 使用模块配置,kibana 的配置文件部分更简单。检索性能高效:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百亿级数据的查询秒级响应。集群线性扩展:elasticsearch 和 logstash 都可以灵活线性扩展前端操作绚丽:kibana 的前端设计比较绚丽,而且操作简单。

1.2 Elasticsearch

一个高度可扩展的开源全文搜索和分析引擎,它可实现数据的实时全文搜索

搜索、支持分布式可实现高可用、提供 API 接口,可以处理大规模日志数据,比如 Nginx、Tomcat、系统日志等功能。

Elasticsearch 使用 Java 语言开发,是建立在全文搜索引擎 Apache Lucene 基础之上的搜索引擎,Apache Lucene - Welcome to Apache Lucene。

Elasticsearch 的特点:

  • 实时搜索、实时分析

  • 分布式架构、实时文件存储

  • 文档导向,所有对象都是文档

  • 高可用,易扩展,支持集群,分片与复制

  • 接口友好,支持 json

1.3 Logstash

Logstash 是一个具有实时传输能力的数据收集引擎,其可以通过插件实现日志收集和转发,支持日志过滤,支持普通 log、自定义 json 格式的日志解析,最终把经过处理的日志发送给 elasticsearch。

1.4 Kibana

Kibana 为 elasticsearch 提 供 一 个 查 看 数 据 的 web 界 面 , 其 主 要 是 通 过elasticsearch 的 API 接口进行数据查找,并进行前端数据可视化的展现,另外还可以针对特定格式的数据生成相应的表格、柱状图、饼图等。

1.5 为什么使用ELK

ELK 组件在海量日志系统的运维中,可用于解决以下主要问题:

  • 分布式日志数据统一收集,实现集中式查询和管理

  • 故障排查

  • 安全信息和事件管理

  • 报表功能

二、ELK原理

2.1 工作原理

(1)在所有需要收集日志的服务器上部署Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash。
(2)Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中。
(3)Elasticsearch 对格式化后的数据进行索引和存储。
(4)Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示。
总结:logstash作为日志搜集器,从数据源采集数据,并对数据进行过滤,格式化处理,然后交由Elasticsearch存储,kibana对日志进行可视化处理。

2.2 ELK的应用架构图

【网络架构】ELK_第1张图片

三、ELK的安装部署

3.1 环境部署

Elasticsearch集群:
node1节点1:192.168.254.10    #内存4G及以上
node2节点2:192.168.254.20    #内存4G及以上

Logstash、Kibana节点:
应用程序节点3:192.168.254.100

3.2 前期环境

#java环境
yum -y install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel

#关闭防火墙
systemctl stop firewalld
setenforce 0

3.3 安装Elasticsearch

#得到一个安装包,此链接可能无效,请自行获取
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.7.2.rpm
rpm -ivh elasticsearch-6.7.2.rpm
#为配置文件做备份
cd /etc/elasticsearch/
mkdir bak
cp -a *.yml bak

3.3.1 修改配置

节点一:

vim elasticsearch.yml

#修改集群名字
cluster.name: my-elk-cluster
node.name: node1
node.master: true
node.data: true
#设置 节点名称 主从之间不能一致  master作为主节点  data作为数据节点
bootstrap.memory_lock: true
#内存锁开启  禁止使用  swap
network.host: 0.0.0.0
#监听地址
http.port: 9200
#  默认使用端口
transport.tcp.port: 9300
#内部传输端口
discovery.zen.ping.unicast.hosts: ["192.168.254.10:9300", "192.168.254.20:9300"]
#自动集群发现,加入主机名  使用单播 类似心跳线

节点二:

vim elasticsearch.yml

#修改集群名字
cluster.name: my-elk-cluster
node.name: node2
node.master: true
node.data: true
#设置 节点名称 主从之间不能一致  master作为主节点  data作为数据节点
bootstrap.memory_lock: true
#内存锁开启  禁止使用  swap
network.host: 0.0.0.0
#监听地址
http.port: 9200
#  默认使用端口
transport.tcp.port: 9300
#内部传输端口
discovery.zen.ping.unicast.hosts: ["192.168.254.10:9300", "192.168.254.20:9300"]
#自动集群发现,加入主机名  使用单播 类似心跳线

节点一与节点二:

#性能调优参数
vim /etc/security/limits.conf
......
*  soft    nofile          65536
*  hard    nofile          65536
*  soft    nproc           32000
*  hard    nproc           32000
*  soft    memlock         unlimited
*  hard    memlock         unlimited


#修改systemd服务管理器
vim /etc/systemd/system.conf
DefaultLimitNOFILE=65536    #设置打开文件数量的默认限制
DefaultLimitNPROC=32000    #设置进程数量的默认限制
DefaultLimitMEMLOCK=infinity    #取消内存锁定限制:将内存锁定限制设置为无限制(infinity),允许服务或进程锁定尽可能多的内存。


    

vim /etc/sysctl.conf
#一个进程可以拥有的最大内存映射区域数,参考数据(分配 2g/262144,4g/4194304,8g/8388608)
vm.max_map_count=262144

sysctl -p

#重启
reboot

systemctl start elasticsearch.service
systemctl status elasticsearch.service

3.3.2 查看节点信息

浏览器访问  
http://192.168.254.10:9200  
http://192.168.254.20:9200 
查看节点 Node1、Node2 的信息

谷歌插件下载:去谷歌商店,搜索elasticsearch head,下载后可以在此插件页面添加节点IP即可可视化查看

3.4 安装Logstash

节点3:

3.4.1 安装服务

#此处自行去网上获取安装rpm包
rpm -ivh logstash-6.7.2.rpm
#开启服务
systemctl start logstash.service
ln -s  /usr/share/logstash/bin/logstash   /usr/bin/
# 做软连接

3.4.2 使用Logstash

Logstash 命令常用选项:
-f:通过这个选项可以指定 Logstash 的配置文件,根据配置文件配置 Logstash 的输入和输出流。
-e:从命令行中获取,输入、输出后面跟着字符串,该字符串可以被当作 Logstash 的配置(如果是空,则默认使用 stdin 作为输入,stdout 作为输出)。
-t:测试配置文件是否正确,然后退出。

#先在本地测试一下
logstash -e 'input { stdin{} } output { stdout{} }'
# 等待时间较长,要耐心
# 当出现[INFO ] 2024-07-16 00:42:10.635 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>9600},代表成功
#随便输入你想输入的信息后回车,软件会返回给你一些值

3.4.3 对接elasticsearch

方式一:命令
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.254.10:9200"] } }'
//结果不在标准输出显示,而是发送至 Elasticsearch 中,可浏览器访问


方式二:配置文件
cd /etc/logstash/conf.d
vim system-log.conf

input {
    file {
      path => "/var/log/messages"
      type => "system"
      start_position => "beginning"
    }
}
output {
  elasticsearch {
  hosts => [ "192.168.254.10:9200","192.168.254.20:9200" ]
  index => "system-%{+YYYY.MM.dd}"
  }
}


chmod +r /var/log/messages 
#添加权限
logstash   -f  system-log.conf
#读取配置文件

#进入浏览器即可查看

3.5 安装kibana

rpm -ivh kibana-6.7.2-x86_64.rpm 
cd /etc/kibana/
cp kibana.yml kibana.yml.bak -a

vim kibana.yml

2   		 server.port: 5601          		#打开端口
7    server.host: "0.0.0.0"      	#监听端口
28   elasticsearch.hosts: ["http://192.168.254.10:9200", "http://192.168.254.20:9200"]  
     #elasticsearch服务器地址
37   kibana.index: ".kibana"         #打开索引,默认.kibana
96   logging.dest: /var/log/k.log      #指定日志文件, 需要手动建立文件
114  i18n.locale: "zh-CN"              #中文设置

chown kibana:kibana /var/log/k.log
systemctl start kibana
ss -nap |grep 5601

#浏览器测试
访问192.168.254.100:5601

四、Logstash配合其他软件

4.1 收集nginx日志

4.1.1 环境介绍

logstash、nginx节点:192.168.254.20

elasticsearch:
node1:192.168.254.100
node2:192.168.254.120

4.1.2 配置

logstash、nginx节点:

vim /etc/nginx/nginx.conf

http {
# 添加在 http  语句块中   
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",'
'"url":"$uri",'
'"domain":"$host",'
'"xff":"$http_x_forwarded_for",'
'"referer":"$http_referer",'
'"status":"$status"}';

#修改默认日志格式
access_log  /var/log/nginx/access.log  access_json;

systemctl stop firewalld
setenforce 0
systemctl start nginx

vim /etc/logstash/conf.d/nginx-log.conf

input {
        file {
               path => "/var/log/nginx/access.log"
               type => "nginx"
               start_position => "beginning"
               codec => "json"    #转换格式为json
               stat_interval => 3    #自动检测,3秒间隔
}
}

output {
        elasticsearch {
        hosts => [ "192.168.254.100:9200", "192.168.254.120:9200"]
        index => "nginx-%{+YYYY.MM.dd}"
        }
}

logstash -f  nginx-log.conf

4.2 收集tomcat日志

4.2.1 环境介绍

tomcat节点、logstash节点:192.168.254.20

elasticsearch:
node1:192.168.254.100
node2:192.168.254.120

4.2.2 配置

logstash、tomcat节点:

vim /usr/local/tomcat/conf/server.xml 
# 最后一行




chmod +r /usr/local/tomcat/logs/*
#修改权限
vim /etc/logstash/conf.d/tomcat-log.conf

input {
  file {
    path => "/usr/local/tomcat/logs/tomcat_access_log.*.log"
    type => "tomcat-acceslog"
    start_position => "beginning"
    stat_interval => "3"
  }
}

output {
  if [type] == "tomcat-acceslog" {
    elasticsearch {
      hosts => ["192.168.254.100:9200","192.168.254.120:9200"]
      index => "logstash-tomcat-accesslog-%{+YYYY.MM.dd}"
  }} 
}


logstash -f tomcat-log.conf

4.3 使用Redis接收tomcat日志

4.3.1 环境介绍

tomcat、logstash节点:192.168.254.20

elasticsearch:
node1:192.168.254.100
node2:192.168.254.120

redis:192.168.254.50

4.3.2 配置

logstash节点:

vim /etc/logstash/conf.d/redis_tomcat-log.conf
input {
  file {
    path => "/usr/local/tomcat/logs/tomcat_access_log.*.log"
    type => "tomcat-acceslog"
    start_position => "beginning"
    stat_interval => "3"
  }

}

output {
  if [type] == "tomcat-acceslog" {
        redis {
        data_type => list
        key => "tomcat-accesslog-50"
        host => "192.168.254.50"
        port => "6379"
        db => "0"
}
}

}

redis节点:

redis-cli

keys*
1) "tomcat-accesslog-50"

4.3.3 其他logstash服务器从redis读取数据

vim /etc/logstash/conf.d/redis.conf 

input {
   redis {
   data_type => "list"
   key => "tomcat-accesslog-50"
   host => "192.168.254.50"
   port => "6379"
   db => "0"
}
}


output {
  elasticsearch {
     hosts => ["192.168.254.100:9200", "192.168.254.120:9200"]
     index => "logstash-tomcat50-accesslog-%{+YYYY.MM.dd}"
}
}

读取后,redis中的数据就会消失

你可能感兴趣的:(网络架构,架构,elk)