随记——ELK部署

一、前期准备

下载安装包:elasticsearch、kibana、logstash、filebeat 注意版本要一致,这里用的是7.13.4

es下载地址:https://www.elastic.co/cn/downloads/elasticsearch
这个地址可以下载所有软件,选择不同版本:https://www.elastic.co/cn/downloads/past-releases#elasticsearch

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.13.4-linux-x86_64.tar.gz
https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.13.4-linux-x86_64.tar.gz
https://artifacts.elastic.co/downloads/kibana/kibana-7.13.4-linux-x86_64.tar.gz
https://artifacts.elastic.co/downloads/logstash/logstash-7.13.4-linux-x86_64.tar.gz

注意防火墙,测试环境可以关闭防火墙,生产可以选择放开相应端口

二、环境搭建

1、安装es

1. 下载解压

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

tar -xzvf elasticsearch-7.13.4-linux-x86_64.tar.gz

2. 创建账号

#es不能使用root用户启动,所以需要创建用户
#创建账户
useradd elastic
#设置密码
passwd elastic
#给账户赋予目录权限
chown -R elastic:elastic {{espath}}
#切换用户
su elastic

3. 服务启动与关闭

# 前台进程
./bin/elasticsearch
# 后台启动 守护进程
./bin/elasticsearch -d

#关闭服务只能直接杀掉进程
ps -ef | grep elastic
kill -9 进程id

4. 单机配置

#修改config/elasticsearch.yml文件
#指定数据存储目录
path.data: /path/to/data
#指定日志存储目录
path.logs: /path/to/logs
#节点对外提供服务的地址以及集群内通信的ip地址,写服务器ip地址即可
network.host: ***.***.***.***
# 初始主节点列表,单机部署写一个就行
cluster.initial_master_nodes: ["node-1"]

5. 集群部署

配置描述

  • cluster.name:集群名称,节点根据集群名称确定是否是同一个集群。
  • node.name:节点名称,集群内唯一。
  • node.roles:[ data, master, voting_only ],node.roles配置项如果没有显式的配置,那么当前节点拥有所有角色(master、data、ingest、ml、remote_cluster_client、transform)。如果你放开了注释,或者手动显式添加了 node.roles配置项,那么当前节点仅拥有此配置项的中括号中显式配置的角色,没有配置的角色将被阉割。因此如果在不熟悉角色配置的情况下,不要轻易修改角色配置值, 切勿画蛇添足
  • network.host: 节点对外提供服务的地址以及集群内通信的ip地址
  • bootstrap.memory_lock: Swapping对性能和节点稳定性非常不利,应该不惜一切代价避免。它可能导致GC持续几分钟而不是几毫秒,并且可能导致节点响应缓慢甚至与集群断开连接。在弹性分布式系统中,使用Swap还不如让操作系统杀死节点效果更好。可以通过设置 bootstrap.memory_lock: true 以防止任何 Elasticsearch 堆内存被换出。
  • http.port:对外提供服务的端口号
  • discovery.seed_hosts: 集群初始化的种子节点,可配置部分或全部候选节点,大型集群可通过嗅探器发现剩余节点,考试环境配置全部节点即可
  • cluster.initial_master_nodes:节点初始 active master节点, 必须是有master角色的节点,即必须是候选节点,但并不是必须配置所有候选节点。生产模式下启动新集群时,必须明确列出应在第一次选举中计算其选票的候选节点。第一次成功形成集群后,cluster.initial_master_nodes从每个节点的配置中删除设置。重新启动集群或向现有集群添加新节点时,请勿使用此设置。

node1

cluster.name: c1
node.name: node-1
node.roles: [master]
path.data: /path/to/data
path.logs: /path/to/logs
bootstrap.memory_lock: true
network.host: 192.168.3.181
http.port: 9200
transport.port: 9300
discovery.seed_hosts: ["192.168.3.181:9300", "192.168.3.182:9300","192.168.3.183:9300", "192.168.3.184:9300","192.168.3.185:9300"]
cluster.initial_master_nodes: ["node-1"]

node2

cluster.name: c1
node.name: node-2
node.roles: [master]
path.data: /path/to/data
path.logs: /path/to/logs
bootstrap.memory_lock: true
network.host: 192.168.3.181
http.port: 9200
transport.port: 9300
discovery.seed_hosts: ["192.168.3.181:9300", "192.168.3.182:9300","192.168.3.183:9300", "192.168.3.184:9300","192.168.3.185:9300"]
cluster.initial_master_nodes: ["node-1"]

node3

cluster.name: c1
node.name: node-3
node.roles: [master,data,voting_only]
path.data: /path/to/data
path.logs: /path/to/logs
bootstrap.memory_lock: true
network.host: 192.168.3.183
http.port: 9200
transport.port: 9300
discovery.seed_hosts: ["192.168.3.181:9300", "192.168.3.182:9300","192.168.3.183:9300", "192.168.3.184:9300","192.168.3.185:9300"]
cluster.initial_master_nodes: ["node-1"]

node4

cluster.name: c1
node.name: node-4
node.roles: [data]
path.data: /path/to/data
path.logs: /path/to/logs
bootstrap.memory_lock: true
network.host: 192.168.3.184
http.port: 9200
transport.port: 9300
discovery.seed_hosts: ["192.168.3.181:9300", "192.168.3.182:9300","192.168.3.183:9300", "192.168.3.184:9300","192.168.3.185:9300"]
cluster.initial_master_nodes: ["node-1"]

node5

cluster.name: c1
node.name: node-5
node.roles: [data]
path.data: /path/to/data
path.logs: /path/to/logs
bootstrap.memory_lock: true
network.host: 192.168.3.185
http.port: 9200
transport.port: 9300
discovery.seed_hosts: ["192.168.3.181:9300", "192.168.3.182:9300","192.168.3.183:9300", "192.168.3.184:9300","192.168.3.185:9300"]
cluster.initial_master_nodes: ["node-1"]

6. 验证

http://ip:9200

7. 安装分词器

  • 下载地址:(选择对应版本的分词器下载,直接下载zip即可)
    https://gitcode.net/mirrors/medcl/elasticsearch-analysis-ik/-/releases?spm=1033.2243.3001.5877

  • es安装目录中的plugins目录下新建目录ik,将下载的zip解压到新建目录下

  • 重启es,log中可以看到插件加载成功

  • 验证插件

#xshell中执行下面命令
#创建index结点
curl -XPUT http://localhost:9200/index
#创建mapping
curl -XPOST http://localhost:9200/index/_mapping -H 'Content-Type:application/json' -d'
{
        "properties": {
            "content": {
                "type": "text",
                "analyzer": "ik_max_word",
                "search_analyzer": "ik_smart"
            }
        }

}'
#推送中文内容
curl -XPOST http://localhost:9200/index/_create/1 -H 'Content-Type:application/json' -d'
{"content":"分词器测试"}
'

curl -XPOST http://localhost:9200/index/_create/2 -H 'Content-Type:application/json' -d'
{"content":"分词器测试我是中文字符"}
'
#查询
curl -XPOST http://localhost:9200/index/_search  -H 'Content-Type:application/json' -d'
{
    "query" : { "match" : { "content" : "分词器" }},
    "highlight" : {
        "pre_tags" : ["<tag1>", "<tag2>"],
        "post_tags" : ["</tag1>", "</tag2>"],
        "fields" : {
            "content" : {}
        }
    }
}
'

2、安装kibana

1. 下载解压

wget https://artifacts.elastic.co/downloads/kibana/kibana-7.13.4-linux-x86_64.tar.gz

tar -xzvf kibana-7.13.4-linux-x86_64.tar.gz

2. 创建账号

kibana也不能使用root账户启动,使用上面es创建的账户即可

3. 服务启动与关闭

# 前台进程
./bin/kibana
# 后台启动 守护进程
nohup ./bin/kibana &

#关闭服务只能直接杀掉进程
ps -ef | grep kibana
kill -9 进程id

4. 配置

#修改config/kibana.yml
#服务ip
server.host: "***.***.***.***"
#es地址
elasticsearch.hosts: ["http://ip:port"]
#国际化,中文
i18n.locale: "zh-CN"

5. 验证

http://ip:5601/

3、安装logstash

1. 下载解压

wget https://artifacts.elastic.co/downloads/logstash/logstash-7.13.4-linux-x86_64.tar.gz

tar -xzvf logstash-7.13.4-linux-x86_64.tar.gz

2. 配置

#修改logstash-sample.conf文件
#input是输入:stdin是从控制台输入,beats是从beats输入
#output 是输出:可以在beats中配置tags属性,在output中使用tags属性区分不同服务
input {
 #stdin{}
  beats {
    port => 5044
  }
}

output {
  if "aaa" in [tags] {
    elasticsearch {
      hosts => ["http://esip:9200"]
      index => "aaa-%{+YYYY.MM.dd}" 
      #user => "elastic"
      #password => "changeme"
    }
  }
  else if "bbb" in [tags] {
    elasticsearch {
      hosts => ["http://esip:9200"]
      index => "bbb-%{+YYYY.MM.dd}"
    }
  }
  else {
    elasticsearch {
      hosts => ["http://esip:9200"]
      index => "ccc-%{+YYYY.MM.dd}"
    }
  }
}

3. 服务启动与关闭

# 前台进程
./logstash -f ../pipeline/logstash-sample.conf
# 后台启动 守护进程
nohup ./logstash -f ../pipeline/logstash-sample.conf &

#关闭服务只能直接杀掉进程
ps -ef | grep logstash
kill -9 进程id

4、安装filebeats

1. 下载解压

#哪台服务器需要采集日志,在哪台服务器安装
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.13.4-linux-x86_64.tar.gz

tar -xzvf filebeat-7.13.4-linux-x86_64.tar.gz

2. 配置

#修改filebeat.yml,一个filebeats可以同时采集多个文件,可以使用tags标记,也可以不标记
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/1.log
  tags: ["aaa"]
  #编码设置,elk默认使用utf-8编码,如果服务器是GB2312,这边需要配置,否则会中文乱码
  encoding: GB2312
  
- type: log
  enabled: true
  paths:
    - /var/log/2.log
  tags: ["bbb"]
#注意 默认是输出到es,这里要改成logstash
output.logstash:
  # The Logstash hosts
  hosts: ["logstash-ip:5044"]

3. 服务启动与关闭

# 前台进程
./filebeat -e -c filebeat.yml
# 后台启动 守护进程
nohup ./filebeat -e -c filebeat.yml >/dev/null 2>&1 &

#关闭服务只能直接杀掉进程
ps -ef | grep filebeat
kill -9 进程id

三、索引配置

  • 点击左侧菜单栏:home -> Stack Management -> 索引模式
  • 点击创建索引模式
  • 输入上面logstatus中创建的索引,如:aaa-*,如果elk部署成功可以查到索引,否则,检查日志文件中是否有数据,地址是否有访问权限,filebeat中配置的日志文件路径是否正确
  • 点击下一步即可创建出索引
  • 点击左侧菜单栏:home -> Discover,即可看到刚才的索引日志

四、定时删除索引

#新建文件delete_index.sh, 写入下面代码
#!/bin/bash
 
#保留近 N 天
KEEP_DAYS=7
 
# 删除前 N的所有天到 前N+10天==>每天执行
function get_todelete_days()
{
    # declare -A DAY_ARR
    # DAY_ARR=""
    for i in $(seq 1 10);
    do
        THIS_DAY=$(date -d "$(($KEEP_DAYS+$i)) day ago" +%Y.%m.%d)
        DAY_ARR=( "${DAY_ARR[@]}" $THIS_DAY)
    done
 
    echo ${DAY_ARR[*]}
 
}
 
# 返回数组的写法
TO_DELETE_DAYS=(`get_todelete_days`)
 
for day in "${TO_DELETE_DAYS[@]}"
do
    echo "$day will be delete"   
    curl -XDELETE 'http://localhost:9200/*-'${day}
done
#新建定时任务
#执行
crontab -e
#写入定时任务
0 1 * * * sh /data/elk/delete_index.sh
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值