安装elk

1.下载安装包

复制代码
# 创建安装目录
mkdir -p /home/elk
cd /home/elk

# 下载各组件(选择自带JDK的版本)
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.0-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.17.0-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.17.0-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.0-linux-x86_64.tar.gz

# 解压
tar -zxvf elasticsearch-7.17.0-linux-x86_64.tar.gz
tar -zxvf kibana-7.17.0-linux-x86_64.tar.gz
tar -zxvf logstash-7.17.0-linux-x86_64.tar.gz
tar -zxvf filebeat-7.17.0-linux-x86_64.tar.gz

2.Elasticsearch 配置

复制代码
# 创建elasticsearch用户
useradd elasticsearch
passwd elasticsearch

# 更改目录所有者
chown -R elasticsearch:elasticsearch /home/elk/elasticsearch-7.17.0

# 打开目录
cd /home/elk/elasticsearch-7.17.0
# 修改文件
vim config/elasticsearch.yml

# 网络配置
network.host: 0.0.0.0
http.port: 9200
# 节点配置
cluster.name: my-elk-cluster
node.name: node-1
node.roles: [ master, data ]
# 内存锁定
bootstrap.memory_lock: true
# 发现配置
discovery.type: single-node
# 安全配置(生产环境建议开启)
xpack.security.enabled: false

# 按上面信息修改完后输入:wq!保存退出

# 编辑系统限制
vi /etc/security/limits.conf

# 添加以下内容
elasticsearch soft nofile 65536
elasticsearch hard nofile 65536
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited

# 编辑sysctl配置
vi /etc/sysctl.conf

# 添加
vm.max_map_count=262144

# 生效配置
sysctl -p

su - elasticsearch
cd /home/elk/elasticsearch-7.17.0

# 使用自带的JDK启动
./bin/elasticsearch -d

3.logstash配置

复制代码
mkdir -p /home/elk/logstash-7.17.0/conf.d
vb 复制代码
`vim /home/elk/logstash-7.17.0/conf.d/filebeat-to-es.conf`
复制代码
input {
  beats {
    port => 5044
    host => "0.0.0.0"
  }
}

filter {
  # 如果有Grok解析需求,可以在这里添加
  grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{GREEDYDATA:message}" }
  }
  
  # 日期解析
  date {
    match => [ "timestamp", "ISO8601" ]
  }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "logs-%{+YYYY.MM.dd}"
  }
  
  # 可选:同时输出到控制台用于调试
  stdout {
    codec => rubydebug
  }
}

cd /home/elk/logstash-7.17.0

# 使用自带JDK启动
./bin/logstash -f conf.d/filebeat-to-es.conf --config.reload.automatic &

4.Filebeat 配置

复制代码
cd /home/elk/filebeat-7.17.0-linux-x86_64
vi filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/*.log
    - /var/log/messages
    - /var/log/secure
    # 添加你的应用日志路径
    - /path/to/your/app/*.log

# 输出到Logstash
output.logstash:
  hosts: ["localhost:5044"]

# 设置Filebeat自身日志
logging.level: info
logging.to_files: true
logging.files:
  path: /var/log/filebeat
  name: filebeat
  keepfiles: 7
  permissions: 0644

cd /home/elk/filebeat-7.17.0-linux-x86_64

# 测试配置
./filebeat test config

# 启动Filebeat
./filebeat &

5.kibana配置

复制代码
cd /home/elk/kibana-7.17.0-linux-x86_64
vi config/kibana.yml

server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]

# 可选:中文化
i18n.locale: "zh-CN"

# 创建kibana用户
useradd kibana
passwd kibana

# 更改目录所有者
chown -R kibana:kibana /home/elk/kibana-7.17.0-linux-x86_64

cd /home/elk/kibana-7.17.0-linux-x86_64

# 使用自带JDK启动
./bin/kibana &

6.创建脚本

1.启动脚本

复制代码
# 创建日志目录
sudo mkdir -p /var/log/kibana
# 赋予 kibana 用户读写权限
sudo chown -R kibana:kibana /var/log/kibana

vim /home/elk/start_elk.sh

#!/bin/bash

echo "Starting ELK Stack..."

# 启动Elasticsearch(-d 后台启动,日志默认在 logs/ 目录)
su - elasticsearch -c "cd /home/elk/elasticsearch-7.17.0 && ./bin/elasticsearch -d"
sleep 30  # 等待ES初始化(视服务器性能可调整时间)

# 启动Logstash(日志重定向到 logstash.log)
cd /home/elk/logstash-7.17.0
nohup ./bin/logstash -f conf.d/filebeat-to-es.conf --config.reload.automatic > logstash.log 2>&1 &
sleep 10

# 启动Filebeat(日志重定向到 filebeat.log)
cd /home/elk/filebeat-7.17.0-linux-x86_64
nohup ./filebeat > filebeat.log 2>&1 &
sleep 10

# 启动Kibana(修正参数,日志重定向到 kibana.log)
su - kibana -c "cd /home/elk/kibana-7.17.0-linux-x86_64 && nohup ./bin/kibana > /var/log/kibana/kibana.log 2>&1 &"

echo "ELK Stack started successfully! Check component logs for details."

2.停止脚本

复制代码
vim /home/elk/stop_elk.sh

#!/bin/bash

echo "Stopping ELK Stack..."

# 函数:安全停止进程(先尝试正常终止,失败再强制)
stop_process() {
    local name=$1
    local pid=$(ps aux | grep -E "$name" | grep -v grep | awk '{print $2}')
    if [ -n "$pid" ]; then
        echo "Stopping $name (PID: $pid)..."
        # 先发送 SIGTERM(15)正常终止
        kill $pid >/dev/null 2>&1
        # 等待5秒,检查是否终止
        sleep 5
        # 若仍存在,发送 SIGKILL(9)强制终止
        if ps -p $pid >/dev/null; then
            echo "$name did not stop gracefully, forcing termination..."
            kill -9 $pid >/dev/null 2>&1
        fi
        # 最终检查
        if ps -p $pid >/dev/null; then
            echo "Failed to stop $name"
            return 1
        else
            echo "$name stopped"
        fi
    else
        echo "$name is not running"
    fi
}

# 按顺序停止组件(数据流入 → 展示 → 存储)
stop_process "filebeat"
stop_process "logstash"
stop_process "kibana"
stop_process "elasticsearch"

echo "ELK Stack stop process completed!"

3.设置脚本权限

复制代码
chmod +x /home/elk/start_elk.sh
chmod +x /home/elk/stop_elk.sh

4.开放端口

开放9022,5601,5044端口

7.验证部署

复制代码
# 检查Elasticsearch
curl http://localhost:9200

# 检查索引
curl http://localhost:9200/_cat/indices?v

# 检查进程
ps aux | grep -e elasticsearch -e logstash -e kibana -e filebeat

# 访问页面
http://your_ip:5601
相关推荐
Jewel Q21 分钟前
防火墙NAT策略处理流程
运维·服务器·网络
失重外太空啦25 分钟前
NFS服务器的搭建
运维·服务器·网络
Jonathan Star44 分钟前
网站识别爬虫(包括以浏览器插件形式运行的爬虫)主要通过分析请求特征、行为模式等差异来区分人类用户和自动化程序
运维·爬虫·自动化
Once_day1 小时前
Linux错误(7)接口处于Down状态不通告IPv6地址变更事件
linux·运维·服务器
Bruce_Liuxiaowei1 小时前
SMB签名关闭的安全风险探讨
运维·windows·安全·网络安全
zzzsde2 小时前
【Linux】基础指令(4):基础指令&&热键&&shell运行原理
linux·运维·服务器
盼哥PyAI实验室4 小时前
纯前端打造个人成长网站:零后端、零部署、零服务器的实践分享
运维·服务器·前端·javascript·echarts·个人开发
信看4 小时前
树莓派 ADS1263 各种库程序
linux·运维·服务器
馨谙5 小时前
Linux 安全文件传输完全指南:sftp 与 scp 的深度解析引言
linux·运维·服务器
姓蔡小朋友5 小时前
Linux网络操作
linux·运维·服务器