侧边栏壁纸
博主头像
SeaDream乄造梦

Dream,Don't stop a day of hard and don't give up a little hope。 ——不停止一日努力&&不放弃一点希望。

  • 累计撰写 86 篇文章
  • 累计创建 21 个标签
  • 累计收到 14 条评论

目 录CONTENT

文章目录

elk 搭建历程

SeaDream乄造梦
2025-01-24 / 0 评论 / 0 点赞 / 242 阅读 / 5,259 字
温馨提示:
亲爱的,如果觉得博主很有趣就留下你的足迹,并收藏下链接在走叭

流程如下:

  • 先使用 Filebeat 把日志收集起来,然后把数据再传给 Logstash。
  • 通过 Logstash 强大的数据清洗功能。
  • 最终把数据写入到 Elasticsearch 中。
  • 并由 Kibana 进行可视化

参考文档:

https://www.51cto.com/article/707776.html

踩的坑:

  1. 指定配置文件启动

安装nc

sudo dnf install -y nc

nc -h

image.png

bin/logstash -f /logstash-7.7.1/streamconf/weblog.conf
  1. 脚本文件

先转化为unix系统的脚本文件

sudo yum install dos2unix   # 对于 CentOS 或 RHEL 系统
dos2unix start.sh
# nohup bin/logstash -f streamconf/weblog.conf &
#!/bin/bash

# Logstash 配置文件路径
CONFIG_PATH="streamconf/weblog.conf"

# 查找 Logstash 进程的 PID
PID=$(ps aux | grep "logstash" | grep -v "grep" | awk '{print $2}')

# 如果有 Logstash 进程在运行,则先杀死它
if [ ! -z "$PID" ]; then
    echo "发现 Logstash 进程 (PID: $PID),正在停止..."
    kill -9 $PID
    echo "Logstash 进程已停止。"
else
    echo "没有发现 Logstash 进程。"
fi

# 启动 Logstash
echo "启动 Logstash..."
nohup bin/logstash -f $CONFIG_PATH &

echo "Logstash 启动命令已执行,后台运行中..."

# tail -f  -n 30 nohup.out

配置文件

logstash

weblog.conf

input {
  beats {
    port => "9900"  # 接收 Filebeat 日志的端口
  }
}

filter {

    grok {
      match => { "message" => "%{COMBINEDAPACHELOG}" }
    }
    mutate {
      convert => { "bytes" => "integer" }
    }
    geoip {
      source => "clientip"
    }
    useragent {
      source => "user_agent"
      target => "useragent"
    }
    date {
      match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
      target => "@timestamp"
    }
	if [level] == "stat" {
	  drop { }
	}

}

output {
  # 输出到 Elasticsearch,根据 index_prefix 动态生成索引
  elasticsearch {
    hosts => ["localhost:9200"]
    user => "elastic"
    passsword => "xxx"
    index => "%{index_prefix}"  # 动态索引
  }

  # 输出到控制台(调试用,可选)
  stdout {
    codec => rubydebug
  }
}

start.sh


# nohup bin/logstash -f streamconf/weblog.conf &
#!/bin/bash

# Logstash 配置文件路径
CONFIG_PATH="streamconf/weblog.conf"

# 查找 Logstash 进程的 PID
PID=$(ps aux | grep "logstash" | grep -v "grep" | awk '{print $2}')

# 如果有 Logstash 进程在运行,则先杀死它
if [ ! -z "$PID" ]; then
    echo "发现 Logstash 进程 (PID: $PID),正在停止..."
    kill -9 $PID
    echo "Logstash 进程已停止。"
else
    echo "没有发现 Logstash 进程。"
fi

# 启动 Logstash
echo "启动 Logstash..."
nohup bin/logstash -f $CONFIG_PATH &

echo "Logstash 启动命令已执行,后台运行中..."

tail -f  -n 30 nohup.out

filebeat

filebeat_apache.yml


filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /xxx1/xxx/server/xxx2/log/**/*.log
    - /xxx1/xxx/server/xxx2/logslave/**/*.log
  fields:
    index_prefix: "test-xx-xxx2"  # 设置 Index 前缀
  fields_under_root: true  # 将自定义字段放到顶层
  ignore_older: 360h        # 忽略超过 24 小时的日志(根据需求调整)

- type: log
  enabled: true
  paths:
#    - /xxx1/gozero/wann-user-api/log/*.log
    - /xxx1/gozero/wann-user-api/**/*.log
  fields:
    index_prefix: "test-xx-user-api"  # 设置 Index 前缀
  fields_under_root: true
  ignore_older: 360h
  
- type: log
  enabled: true
  paths:
#    - /xxx1/gozero/wann-user-api/log/*.log
    - /xxx1/gozero/wann-operation-api/**/*.log
  fields:
    index_prefix: "test-xx-operation-api"  # 设置 Index 前缀
  fields_under_root: true
  ignore_older: 360h

  
  
- type: log
  enabled: true
  paths:
    - /xxx1/xxx/server/admin/log/**/*.log
  fields:
    index_prefix: "test-xx-admin"  # 设置 Index 前缀
  fields_under_root: true
  ignore_older: 360h  

# output.elasticsearch:
#   hosts: ["http://ip:9200"]
  
output.logstash:
  hosts: ["ip:9900"]  # 将日志发送到 Logstash  

start.sh

# nohup ./filebeat -e -c filebeat_apache.yml &

#!/bin/bash

# Filebeat 配置文件路径
CONFIG_PATH="filebeat_apache.yml"

# 查找 Filebeat 进程的 PID
PID=$(ps aux | grep "filebeat" | grep -v "grep" | awk '{print $2}')

# 如果有 Filebeat 进程在运行,则先杀死它
if [ ! -z "$PID" ]; then
    echo "发现 Filebeat 进程 (PID: $PID),正在停止..."
    kill -9 $PID
    echo "Filebeat 进程已停止。"
else
    echo "没有发现 Filebeat 进程。"
fi

# 启动 Filebeat
echo "启动 Filebeat..."
# nohup ./filebeat -e -c $CONFIG_PATH &
# nohup ./filebeat -e -c $CONFIG_PATH & disown
nohup ./filebeat -e -c filebeat_apache.yml & disown
# nohup ./filebeat -e -c $CONFIG_PATH > filebeat.log 2>&1 &

echo "Filebeat 启动命令已执行,后台运行中..."

# tail -f  -n 30 nohup.out


es

elasticsearch.yml

cluster.name: "my-es"
network.host: 0.0.0.0
http.port: 9200
xpack.security.enabled: true

kibana

kibana.yml

# Default Kibana configuration for docker target
server.name: kibana
server.host: "0"
elasticsearch.hosts: ["http://172.17.0.3:9200"]
xpack.monitoring.ui.container.elasticsearch.enabled: true
elasticsearch.username: "elastic"
elasticsearch.password: "password"

成品展示

image.png

配置开机自启

vim /etc/rc.local
# 加入文件绝对路径

设置登录密码

要在 Docker 环境中为您的 Elasticsearch 和 Kibana(版本 7.7.1)设置登录密码:

  1. 启用 Elasticsearch 安全功能

    • Elasticsearch 默认未启用安全功能。要启用它,您需要修改 elasticsearch.yml 配置文件。

    • 首先,进入运行中的 Elasticsearch 容器:

      docker exec -it <elasticsearch_container_name> /bin/bash
      
    • 然后,编辑 config/elasticsearch.yml 文件,添加以下内容:

      xpack.security.enabled: true
      

      这将启用 Elasticsearch 的安全功能。

    • 保存文件并退出编辑器后,退出容器并重启 Elasticsearch 容器使配置生效:

      exit
      docker restart <elasticsearch_container_name>
      
  2. 设置内置用户密码

    • 在启用安全功能后,您需要为内置用户设置密码。再次进入 Elasticsearch 容器:

      docker exec -it <elasticsearch_container_name> /bin/bash
      
    • 运行以下命令以交互方式设置内置用户的密码:

      ./bin/elasticsearch-setup-passwords interactive
      

      按照提示,为每个内置用户(如 elastickibana 等)设置密码。

  3. 配置 Kibana

    • Kibana 需要使用已设置的用户名和密码来连接 Elasticsearch。编辑 Kibana 的配置文件 kibana.yml

    • 首先,进入运行中的 Kibana 容器:

      docker exec -it <kibana_container_name> /bin/bash
      
    • 编辑 config/kibana.yml 文件,添加以下内容:

      elasticsearch.username: "kibana"
      elasticsearch.password: "<kibana_user_password>"
      

      <kibana_user_password> 替换为您在前一步中为 kibana 用户设置的密码。

    • 保存文件并退出编辑器后,退出容器并重启 Kibana 容器使配置生效:

      exit
      docker restart <kibana_container_name>
      
  4. 验证配置

    • 在浏览器中访问 Kibana 的 URL(通常为 http://<your_host>:5601)。

    • 此时,Kibana 应提示您输入用户名和密码。使用 elastic 用户名和您之前设置的密码进行登录。

0

评论区