ELK7.8日志分析平台部署实践
ELK介绍
Elasticsearch是一款开源的分布式搜索引擎,提供搜集、分析、存储数据。
特点:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源等
Logstash:作用于日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。
基于c/s架构,Client端(FileBeat)部署在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作再发往elasticsearch。
Kibana 实现数据可视化。在 Elastic Stack 中进行导航,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好Web 界面,汇总、分析和搜索重要数据日志。
Beats:收集、解析和传输数据等常用beat有:Filebeat,Packetbeat,Metricbeat,Auditbeat,Winlogbeat 此次我们将用Filebeat做Client端
注: Beats 和 Logstash 之间支持 SSL/TLS 加密传输,客户端和服务器双向认证,保证了通信安全
ELK整体架构图:
一、 ELK部署环境准备
1、 服务器环境准备
10.0.60.191 elk-master 部署Role:Logstash, ES, Kibana
10.0.60.192 Elasticsearch-n1 部署Role:Elasticsearch
10.0.60.193 Elasticsearch-n2 部署Role:Elasticsearch
10.0.60.195 ELK-Client 部署Role:Filebeat
2、 安装JDK
Elasticsearch、Logstash的部署都需要JDK环境的支持,分别在10.0.60.191-193上进行安装部署在oracle官方下载8版本以上的JDK版本
这里选择JDK14
tar -zxvf jdk-14.0.2_linux-x64_bin.tar.gz -C /usr/local/ #解压完毕后将JDK路径增加到环境变量中 vim /etc/profile #文件定位到PATH处新增一行进行增加环境变量 export JAVA_HOME=/usr/jdk-14.0.2/ export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
3、 部署ELK之前需对操作系统调优设置否则会提示报错
#修改 limits.conf文件 vi /etc/security/limits.conf #增加以下内容 * soft nofile 65536 * hard nofile 65536 * soft nproc 4096 * hard nproc 8192 #修改系统文件20-nproc.conf vi /etc/security/limits.d/20-nproc.conf 优化以下参数配置: * soft nproc 4096 root soft nproc unlimited #调整内核参数 vi /etc/sysctl.conf vm.max_map_count=262144 #限制一个进程可以拥有的VMA数量 fs.file-max=655360 #系统中可以同时打开的文件数目 #调整完毕需要重新加载内核参数 sysctl -p
4、配置hosts记录主机名解析工作(三台主机都需要添加)
vi /etc/hosts 10.0.60.191 elk-master 10.0.60.192 Elasticsearch-n1 10.0.60.193 Elasticsearch-n2
5、关闭linux firewall、Selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config setenforce 0 systemctl stop firewalld systemctl disable firewalld
6、创建普通用户用于启动elk使用这里我们就以elk为用户名进行创建
useradd elk #默认会创建同步用户组
7、 创建ELK安装目录:
mkdir /usr/local/elk chown -R elk:elk /usr/local/elk
8、通过elastic官网下载elk所需安装包
下载完毕后解压至/usr/local/elk下
#master wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.0-linux-x86_64.tar.gz wget https://artifacts.elastic.co/downloads/logstash/logstash-7.8.0.tar.gz wget https://artifacts.elastic.co/downloads/kibana/kibana-7.8.0-linux-x86_64.tar.gz tar -zxvf elasticsearch-7.8.0-linux-x86_64.tar.gz -C /usr/local/elk && \ tar -zxvf logstash-7.8.0.tar.gz -C /usr/local/elk && \ tar -zxvf kibana-7.8.0-linux-x86_64.tar.gz -C /usr/local/elk #将elasticsearch-7.8.0-linux-x86_64.tar.gz利用scp复制到其他两台node上
二、部署Elasticsearch集群
2.1、 切换到刚创建的elk用户环境下配置elasticsearch
su - elk
2.2、创建Elasticsearch数据目录、日志目录
mkdir /usr/local/elk/elasticsearch-7.8.0/data #此操作需在三台服务器操作 mkdir /usr/local/elk/elasticsearch-7.8.0/logs #此操作需在三台服务器操作
2.3、编辑ES-Master节点配置文件:
vi /usr/local/elk/elasticsearch-7.8.0/config/elasticsearch.yml # ES集群名称 cluster.name: escluster # ES节点名称 node.name: elk-master # 存放数据目录 path.data: /usr/local/elk/elasticsearch-7.8.0/data # 存放日志目录 path.logs: /usr/local/elk/elasticsearch-7.8.0/logs # 节点IP network.host: 10.0.60.191 # tcp端口 transport.tcp.port: 9300 # http端口 http.port: 9200 # ES节点列表,Master节点IP须在seed_hosts中 discovery.seed_hosts: ["10.0.60.191:9300","10.0.60.192:9300","10.0.60.193:9300"] # Master节点列表,若有多个Master节点,则Master节点进行配置 cluster.initial_master_nodes: ["10.0.60.191:9300"] # 是否允许作为Master节点 node.master: true # 是否保存数据 node.data: true node.ingest: false node.ml: false cluster.remote.connect: false # 是否开启跨域功能 http.cors.enabled: true http.cors.allow-origin: "*"
2.4、编辑ES-Node01节点配置文件:
vi /usr/local/elk/elasticsearch-7.8.0/config/elasticsearch.yml # ES集群名称 cluster.name: escluster # ES节点名称 node.name: elasticsearch-n1 # 存放数据目录 path.data: /usr/local/elk/elasticsearch-7.8.0/data # 存放日志目录 path.logs: /usr/local/elk/elasticsearch-7.8.0/logs # 节点IP network.host: 10.0.60.192 # tcp端口 transport.tcp.port: 9300 # http端口 http.port: 9200 # ES节点列表,Master节点IP须在seed_hosts中 discovery.seed_hosts: ["10.0.60.191:9300","10.0.60.192:9300","10.0.60.193:9300"] # Master节点列表,若有多个Master节点,则Master节点进行配置 cluster.initial_master_nodes: ["10.0.60.191:9300"] # 是否允许作为Master节点 node.master: false # 是否保存数据 node.data: true node.ingest: false node.ml: false cluster.remote.connect: false # 是否开启跨域功能 http.cors.enabled: true http.cors.allow-origin: "*"
2.5、编辑ES-Node02节点配置文件:
vi /usr/local/elk/elasticsearch-7.8.0/config/elasticsearch.yml # ES集群名称 cluster.name: escluster # ES节点名称 node.name: elasticsearch-n2 # 存放数据目录 path.data: /usr/local/elk/elasticsearch-7.8.0/data # 存放日志目录 path.logs: /usr/local/elk/elasticsearch-7.8.0/logs # 节点IP network.host: 10.0.60.193 # tcp端口 transport.tcp.port: 9300 # http端口 http.port: 9200 # ES节点列表,Master节点IP须在seed_hosts中 discovery.seed_hosts: ["10.0.60.191:9300","10.0.60.192:9300","10.0.60.193:9300"] # Master节点列表,若有多个Master节点,则Master节点进行配置 cluster.initial_master_nodes: ["10.0.60.191:9300"] # 是否允许作为Master节点 node.master: false # 是否保存数据 node.data: true node.ingest: false node.ml: false cluster.remote.connect: false # 是否开启跨域功能 http.cors.enabled: true http.cors.allow-origin: "*"
2.6、 配置完之后开始启动ES
/usr/local/elk/elasticsearch-7.8.0/bin/elasticsearch -d
2.7、 启动ES后利用curl检查启动情况也是通常部署时常用的检查方法
[root@elk-master ~]# curl -X GET 'http://10.0.60.191:9200/_cluster/health?pretty' { "cluster_name" : "escluster", "status" : "green", "timed_out" : false, "number_of_nodes" : 3, "number_of_data_nodes" : 3, "active_primary_shards" : 12, "active_shards" : 24, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0 } #状态值:Green代表服务正常
三、安装kibana
3.1 修改Kibana配置文件
cd /usr/local/elk/kibana-7.8.0-linux-x86_64/config vim kibana.yml # 指定kibana端口 server.port: 5601 # 监听地址 server.host: "10.0.60.191" # 指定ES集群的Master服务器ip地址。 elasticsearch.hosts: "http://10.0.60.191:9200/" # 指定kibana存放日志文件路径 logging.dest:/home/app/elk/kibana-7.8.0-linux-x86_64/logs/kibana.log
3.2、启动kibana
nohup /usr/local/elk/kibana-7.8.0-linux-x86_64/bin/kibana & #启动过程中可通过tail -f nohup.out启动是否存在报错日志
四、 安装filebeat
在10.0.60.195上面已经安装了nginx服务并运行,后面我们利用filebeat采集nginx请求日志
4.1、官网下载filebeat:
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.8.0-linux-x86_64.tar.gz tar -zxvf filebeat-7.8.0-linux-x86_64.tar.gz -C /usr/local
4.2、配置filebeat.yml
vim /usr/local/filebeat-7.8.0/filebeat.yml #=========================== Filebeat inputs ============================= filebeat.inputs: - type: log paths: - /usr/local/nginx/logs/access.log fields: log_source: nginx-access - type: log paths: - /usr/local/nginx/logs/error.log fields: log_source: nginx-error #============================== Dashboards ===================================== setup.dashboards.enabled: false #============================== Kibana ===================================== #添加到libana setup.kibana: host: "10.0.60.191:5601" #----------------------------- Logstash output -------------------------------- output.logstash: # The Logstash hosts hosts: ["10.0.60.191:5044"]
4.3、 启动filebeat
cd /usr/local/filebeat-7.8.0/ && nohup ./filebeat -c filebeat.yml &
五、 安装logstash角色:-------Master
5.1、创建logstash.conf文件
vim /usr/local/elk/logstash-7.8.0/config/logstash.conf input { beats { port => 5044 #指定端口5044,filebeat配置中一致 } } filter { if [fields][log_source]=="nginx-access"{ grok { match => { "message" => '%{IP:clientip}\s*%{DATA}\s*%{DATA}\s*\[%{HTTPDATE:requesttime}\]\s*"%{WORD:requesttype}.*?"\s*%{NUMBER:status:int}\s*%{NUMBER:bytes_read:int}\s*"%{DATA:requesturl}"\s*%{QS:ua}' } overwrite => ["message"] } } if [fields][log_source]=="nginx-error"{ grok { match => { "message" => '(?<time>.*?)\s*\[%{LOGLEVEL:loglevel}\]\s*%{DATA}:\s*%{DATA:errorinfo},\s*%{WORD}:\s*%{IP:clientip},\s*%{WORD}:%{DATA:server},\s*%{WORD}:\s*%{QS:request},\s*%{WORD}:\s*%{QS:upstream},\s*%{WORD}:\s*"%{IP:hostip}",\s*%{WORD}:\s*%{QS:referrer}' } overwrite => ["message"] } } } output { if [fields][log_source]=="nginx-access"{ elasticsearch { hosts => ["http://10.0.60.191:9200"] action => "index" index => "nginx-access-%{+YYYY.MM.dd}" } } if [fields][log_source]=="nginx-error"{ elasticsearch { hosts => ["http://10.0.60.191:9200"] action => "index" index => "nginx-error-%{+YYYY.MM.dd}" } } stdout { codec => rubydebug } } #这里我们自定义Index,elk中logstash-*是为elk自带索引可以试用一下
5.2、 启动logstash
nohup /usr/local/elk/logstash-7.8.0/bin/logstash -f /usr/local/elk/logstash-7.8.0/config/logstash.conf &
到目前为止elk环境已经部署完毕,接下来验证一次
六、登录Kibana平台
- 点赞
- 收藏
- 关注作者
评论(0)