ELK日志分析系统部署。

 

一、规划

分为以下2种

ELK:Logstash作为被控端采集日志存储至elasticsearch,然后kibana调用es数据来展示

ELK+F:在上面的基础上加一个轻量级的filebeat来作为采集被控端,然后输出日志到Logstash服务端,Logstash在日志存储至elasticsearch,然后kibana调用es数据来展示。

 

 

 

1、机器说明

主机名IP备注版本
elasticsearch-01 192.168.227.93 部署ElasticSearch主节点,环境java1.8 7.0.1
elasticsearch-02 192.168.227.91 部署ElasticSearch从节点,环境java1.8 7.0.1
kibana 192.168.227.90 部署kibana分析日志(web页面),环境java1.8 7.0.1
Logstash 192.168.227.88 采集日志,安装在存有日志的机器上或者安装一台作为服务端来接收filebeat发送的日志,再转发存储至es,环境java1.8 7.0.1

2、ELK环境准备

由于Elasticsearch、Logstash、Kibana均不能以root账号运行。 但是Linux对非root账号可并发操作的文件、线程都有限制。 所以,部署ELK相关的机器都要调整:

  • 修改文件限制

# 修改系统文件
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

 

  • 创建ELK专用用户

useradd elk
  • 创建ELK相关目录并赋权

#创建ELK 数据目录
mkdir /data/elk/
#创建ELK APP目录
将解压后的压缩包mv至data/elk

#更改目录Owner
chown -R elk:elk /data/elk

3、ELK组件包下载地址

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.0.1-linux-x86_64.tar.gz

 

二、Elasticsearch 部署

本次一共要部署两个Elasticsearch节点,所有文中没有指定机器的操作都表示每个Elasticsearch机器都要执行该操作

1、准备工作

  • 移动Elasticsearch到统一目录

    root@elasticsearch-01:/data/elk# ls elasticsearch-7.0.1 root@elasticsearch-01:/data/elk#

  • 切换账号

    su - elk
  • 数据&日志目录

创建Elasticsearch主目录
mkdir /data/elk/es
#创建Elasticsearch数据目录
mkdir /data/elk/es/data
#创建Elasticsearch日志目录
mkdir /data/elk/es/logs

2、Elasticsearch节点配置

  • 修改配置

    #打开目录
    cd /data/elk/elasticsearch-7.0.1/
    #修改配置

    vi config/elasticsearch.yml

     

  • 主节点配置(192.168.227.93)

cluster.name: my-application
node.name: node-1
node.attr.rack: r1
path.data: /data/elk/es/data
path.logs: /data/elk/es/logs
bootstrap.memory_lock: true
network.host: 192.168.227.93
http.port: 9200
discovery.seed_hosts: ["192.168.227.93", "192.168.227.91"]
cluster.initial_master_nodes: ["node-1"]
action.destructive_requires_name: true

 

  • 从节点配置(192.168.227.91)

cluster.name: my-application
node.name: node-2
node.attr.rack: r1
path.data: /data/elk/es/data
path.logs: /data/elk/es/logs
network.host: 192.168.227.91
http.port: 9200
discovery.seed_hosts: ["192.168.227.93", "192.168.227.91"]
action.destructive_requires_name: true

 

  • 配置项说明

说明
cluster.name 集群名
node.name 节点名
path.data 数据保存目录
path.logs 日志保存目录
network.host 节点host/ip
http.port HTTP访问端口
transport.tcp.port TCP传输端口
node.master 是否允许作为主节点
node.data 是否保存数据
discovery.zen.ping.unicast.hosts 集群中的主节点的初始列表,当节点(主节点或者数据节点)启动时使用这个列表进行探测
discovery.zen.minimum_master_nodes 主节点个数

 

3、Elasticsearch启动&健康检查

  • 启动

    #进入elasticsearch根目录
    cd /data/elk/elasticsearch-7.0.1/
    #启动
    ./bin/elasticsearch &

 

三、Kibana部署

下载地址:https://artifacts.elastic.co/downloads/kibana/kibana-7.0.1-linux-x86_64.tar.gz

1、机器准备

初始化环境,建立用户和安装路径

hostnamectl set-hotname kibana
useradd elk
mkdir /usr/elk
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.0.1-linux-x86_64.tar.gz
tar -xf kibana-7.0.1-linux-x86_64.tar.gz -C usr/elk/ ##解压包至elk目录
chown -R elk:elk /usr/elk

 

2、修改kibana配置文件

elk@kibana:/usr/elk$ cat /usr/elk/kibana-7.0.1/config/kibana.yml| grep -Ev '^$|#'

i18n.locale: "zh-CN" ###设置为中文
server.port: 5601     ##监听端口
server.host: "192.168.227.90"    
elasticsearch.hosts: "http://192.168.227.93:9200"   ##es主机

 

3、启动kibana

su elk

./usr/elk/kibana-7.0.1/bin/kibana & 启动kibana后台运行

已经启动

image-20210708112044620

 

 

四、Logstash对接es

 

1、机器准备

注意:这里是在需要对接日志的机器安装,此处不安装在192.168.227.88机器上,这台机器给第八步骤使用!

在需要对接日志的机器上安装logstash,然后对接elasticsearch主机。

logstash下载地址:https://artifacts.elastic.co/downloads/logstash/logstash-7.0.1.tar.gz

以下是脚本,快速创建修改目录以及安装logstash



appdeploy@CDT-SIT-APP-03:~$ cat logstash_install.sh
#!/bin/bash

#创建elk用户
useradd elk

#创建相关目录
mkdir /usr/elk
mkdir -p /data/elk/logstash/data
mkdir -p /data/elk/logstash/logs

#安装logstash
tar -xf logstash-7.0.1.tar.gz
mv logstash-7.0.1 /usr/elk/logstash-7.0.1

echo "path.data: /data/elk/logstash/data" >> /usr/elk/logstash-7.0.1/config/logstash.yml
echo "path.data: /data/elk/logstash/logs" >> /usr/elk/logstash-7.0.1/config/logstash.yml

chown -R elk:elk /data/elk
chown -R elk:elk /usr/elk

 

2、建立conf文件

 

首先,logstash agent按配置好的规则从每台服务器上收集log,收集好后发送给elasticsearch,elasticsearch再创建索引并存储,最后再通过kibana结合es从web界面进行查询和展示。

了解流程后,需要了解logstash是怎么从日志里收集数据的。这里,就需要建立conf文件了。如下:

 

root@CDT-SIT-APP-03:/usr/elk/logstash-7.0.1/config# cat input-output.conf

input {
file{
path => ["/data/logs/cec-evcs-data-service-9267.log"]

start_position => beginning

codec=>plain

discover_interval=>30

}

}

output {
    stdout { codec => plain }

    elasticsearch {
        hosts => "192.168.227.93:9200"

        index => "cec_evcs_data_service_9267-%{+YYYY.MM.dd}"
      ## 日志背后以年月日结尾作为日志切割,方便后期的日志清理。

}

}

 

3、执行启动Logstash

 

su elk

/usr/elk/logstash-7.0.1/bin/logstash -f /usr/elk/logstash-7.0.1/config/input-output.conf --config.reload.automatic >/dev/null &

 

五、kibana页面

 

1、查看节点信息

点击左侧列表:堆栈监测

image-20210708154112239

 

选择节点:

以下为节点信息。

image-20210708154218199

 

2、创建索引

点击左侧列表:管理

 

image-20210708154311788

 

 

创建索引模式即可,如下图

索引模式为:cec_evcs_data_service_9267*

image-20210708173124734

 

创建索引,以时间筛选字段。

 

image-20210708173155801

 

 

3、查看日志分析

 

image-20210708173244387

 

六、ELK定时删除日志

以下这个地址是主es的日志存储展示,自行更换ip哈。因为是主从结构,所以删除主es的即会同步删除从es的日志。

http://192.168.227.91:9200/_cat/indices?v

image-20210708174329252

 

1、执行脚本删除

 

将以下脚本放至主es的/data/elk/clear_log_script目录下,

脚本说明:前提是日志以日期切片保存,然后筛选多少天前的日志出来保存至指定文本,for循环执行删除日志。删除主es的即可。

cat /data/elk/clear_log_script/clear_log.sh

  #!/bin/bash
  #删除ELK10天前的日志,自己看情况改。
   
  DATE=`date -d "10 days ago" +%Y.%m.%d`
   
  curl -s -XGET http://127.0.0.1:9200/_cat/indices?v| grep $DATE | awk -F '[ ]+' '{print $3}' >/data/elk/clear_log_script/elk.log
   
  for elk in `cat /data/elk/clear_log_script/elk.log`
   
  do
   
  curl -XDELETE "http://192.168.227.93:9200/$elk"
   
  done

 

加入到定时任务

# crontab -e

#每天凌晨1点定时清理elk索引`

00 01 * * * bash /data/elk/clear_log_script/clear_log.sh &>/dev/null

注意:保证crond服务是启动的

 

2、kibana页面删除es存储索引

 这还要我写?自己页面点点就好了。

 

 3、单台ES情况下没有分片,

3、kibana页面显示索引YELLOW

所有的日志会现实黄色警告,yellow,下面这个脚本是将其改为绿色,需要定期执行

 

root@CDT-UAT-LOG:/data/# cat /data/elk/green.sh 
#!/bin/bash
curl -H "Content-Type: application/json" -XPUT 'http://localhost:9200/_settings' -d '
{
     "index" : {
        "number_of_replicas" : 0
     }
 }'

 

 

七、ELK在linux后台启动命令

1、filebeat启动

后台启动生成日志文件

进入file-..*目录下 nohup ./filebeat -e -c filebeat.yml -d "Publish" & > nohup.out

后台启动不生成日志

./filebeat -e -c filebeat.yml -d "Publish" >/dev/null 2>&1 &

关键在于最后的 >/dev/null 2>&1 部分,/dev/null是一个虚拟的空设备(类似物理中的黑洞),任何输出信息被重定向到该设备后,将会石沉大海 /dev/null 表示将标准输出信息重定向到"黑洞" 2>&1 表示将标准错误重定向到标准输出(由于标准输出已经定向到“黑洞”了,即:标准输出此时也是"黑洞",再将标准错误输出定向到标准输出,相当于错误输出也被定向至“黑洞”)

2、logstash 启动

后台启动生成日志文件

进入logstash-..*目录下 我这里为了方便把logstash-sample.conf 文件放在了bin目录下 nohup ./bin/logstash -f bin/logstash-sample.conf & > nohup.out

后台启动不生成日志

./bin/logstash -f bin/logstash-sample.conf >/dev/null 2>&1 &

3、启动elasticsearch

后台启动生成日志

进入elastic-..*/bin 目录下 nohup ./elasticsearch & > nohup.out

后台启动不生成日志

./elasticsearch >/dev/null 2>&1 &

 

八、ELK+filebeat

 

参考文件:https://blog.csdn.net/wsdc0521/article/details/106308441/

 

以上已经实现了logstash采集日志存储至ES,然后kibana展示。为避免logstash作为日志采集器客户端占用资源过大,在原有基础上增加一个filebeat。即设置机器作为Logstash的服务端。其他存有日志的机器上安装轻量级的filebeat作为日志采集器(安装包才十几M)。

部署Logstash服务端

1、部署Logstash服务端

注意:此处安装在192.168.227.88机器上作为服务端接收filebeat

在需要对接日志的机器上安装logstash,然后对接elasticsearch主机。

logstash下载地址:https://artifacts.elastic.co/downloads/logstash/logstash-7.0.1.tar.gz

以下是脚本,快速创建修改目录以及安装logstash


appdeploy@CDT-SIT-APP-03:~$ cat logstash_install.sh
#!/bin/bash

#创建elk用户
useradd elk

#创建相关目录
mkdir /usr/elk
mkdir -p /data/elk/logstash/data
mkdir -p /data/elk/logstash/logs

#安装logstash
tar -xf logstash-7.0.1.tar.gz
mv logstash-7.0.1 /usr/elk/logstash-7.0.1

echo "path.data: /data/elk/logstash/data" >> /usr/elk/logstash-7.0.1/config/logstash.yml
echo "path.data: /data/elk/logstash/logs" >> /usr/elk/logstash-7.0.1/config/logstash.yml

chown -R elk:elk /data/elk
chown -R elk:elk /usr/elk

 

2、建立conf文件

 

首先,logstash服务端按配置好的规则从每台filebeat服务器上接收log,收集好后发送给elasticsearch,elasticsearch再创建索引并存储,最后再通过kibana结合es从web界面进行查询和展示。

了解流程后,需要了解logstash是怎么从filebeat收集数据的。这里,就需要建立conf文件了。如下:

以下是采集多个日志分别推送至es创建索引,有nginx和java得日志,通过if语句判断存储至指定索引。

 ​

root@logstash:/usr/elk/logstash-7.0.1/config# vi logstash.conf 
​
input {
beats {

port => 5044


}

}

output {
if [tags][0] == "charge-service-9266"{
elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "cec-evcs-charge-service-9266-%{+YYYY.MM.dd}"
}
}
if [tags][0] == "data-service-9267"{
elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "cec-evcs-data-service-9267-%{+YYYY.MM.dd}"
}
}
if [tags][0] == "data-service-msg"{
elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "cec-evcs-data-service-msg-%{+YYYY.MM.dd}"
}
}
if [tags][0] == "chargemgmtapp-9216-error"{
elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "cdt-chargemgmtapp-9216-error-%{+YYYY.MM.dd}"
}
}
if [tags][0] == "saas-pay-data-service-info"{
elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "saas-pay-data-service-info-%{+YYYY.MM.dd}"
}
}
if [tags][0] == "saas-pay-data-service-error"{
elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "saas-pay-data-service-error-%{+YYYY.MM.dd}"
}
}
if [tags][0] == "saas-pay-platform-service-info"{
elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "saas-pay-platform-service-info-%{+YYYY.MM.dd}"
}
}
if [tags][0] == "saas-pay-platform-service-error"{
elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "saas-pay-platform-service-error-%{+YYYY.MM.dd}"
}
}
}
 

 

3、执行启动Logstash

 

su elk

/usr/elk/logstash-7.0.1/bin/logstash -f /usr/elk/logstash-7.0.1/config/input-output.conf --config.reload.automatic >/dev/null &

 

 

被控端部署filebeat

 

安装包连接:wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.0.1-linux-x86_64.tar.gz

1、准备filebeat客户端采集日志

useradd elk

#创建相关目录
mkdir /usr/elk
mkdir -p /data/elk/
mkdir -p /data/elk/

#安装filebeat
tar -xf filebeat-7.0.1.tar.gz
mv logstash-7.0.1 /usr/elk/logstash-7.0.1


chown -R elk:elk /data/elk
chown -R elk:elk /usr/elk

 

2、修改conf文件

这台机器接入java日志

appdeploy@CDT-SIT-APP-03:/usr/elk/filebeat-7.0.1$ cat filebeat_min.yml 
filebeat.inputs:
- type: log
enabled: true
paths:
  - /data/logs/cec-evcs-data-service-msg.log
tags: ["service-msg"]
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 1
setup.kibana:
output.logstash:
hosts: ["192.168.227.88:5044"]
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~

 

这台机器接入nginx日志

root@CDT-PT-NGINX-02:/home/appdeploy# cat /usr/elk/filebeat-7.0.1/filebeat2.yml
filebeat.inputs:
- type: log
enabled: true
paths:
  - /data/test2.log
tags: ["test_nginx"]
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 1
setup.kibana:
output.logstash:
hosts: ["192.168.227.88:5044"]
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~

 

 

3、启动filebeat

 

nohup /usr/elk/filebeat-7.0.1/filebeat -e -c /usr/elk/filebeat-7.0.1/filebeat.yml >/dev/null 2>&1 &

 

 

posted @ 2021-07-12 19:51  疯刘小三  阅读(221)  评论(0编辑  收藏  举报