ELK(Elasticsearch、Logstash、Kibana) 分布式日志搭建详细过程

ELK是三款软件的简称,分别是ElasticsearchLogstashKibana组成

本文中描述了ELK日志平台的详细搭建过程,不对工具用途做描述。


一、准备

安装包

所需安装包及官网下载地址:

elasticsearch-8.14.3-linux-x86_64.tar.gz (https://www.elastic.co/cn/downloads/elasticsearch)

logstash-8.14.3-linux-x86_64.tar.gz (https://www.elastic.co/cn/downloads/logstash)

kibana-8.14.3-linux-x86_64.tar.gz (https://www.elastic.co/cn/downloads/kibana)

elasticsearch-head.tar(docker离线包)

GeoLite2-City.mmdb

官网下载慢可以到网盘下载

链接: https://pan.baidu.com/s/1LL1oS4KTkcerd9ktjEK14Q?pwd=ku63 提取码: ku63

环境

Linux CentOS 7

ip地址:192.168.0.2


二、搭建过程

Elasticsearch

安装

  • 解压到相应目录
bash 复制代码
tar -zxvf elasticsearch-8.14.3-linux-x86_64.tar.gz -C /opt/elk/
  • 修改配置
bash 复制代码
vim /opt/elk/elasticsearch-8.14.3/config/elasticsearch.yml
bash 复制代码
node.name: node-1
path.data: /opt/elk/elasticsearch-8.14.3/data
path.logs: /opt/elk/elasticsearch-8.14.3/logs
network.host: 127.0.0.1
http.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["127.0.0.1"]
cluster.initial_master_nodes: ["node-1"]
  • 创建es用户,因为elasticsearch 不支持root用户操作
bash 复制代码
useradd es

chown -R es:es /opt/elk/elasticsearch-8.14.3

启动

  • 切换es用户进行启动
bash 复制代码
su - es

#一下启动方式二选一即可

#前台启动

/opt/elk/elasticsearch-8.14.3/bin/elasticsearch

#后台启动

/opt/elk/elasticsearch-8.14.3/bin/elasticsearch -d

注意:启动发现有报错,可以查看博主的另外一遍文章进行处理https://blog.csdn.net/a34569345/article/details/132768352?spm=1001.2014.3001.5501

在浏览器打开http://192.168.0.2:9200/,如果出现下面信息,则表示成功

这时候访问链接会发现不正常,是因为默认开启了ssl,下面把ssl和密码登录都关闭,再重启es,再访问就会正常

elasticsearch-head(选择性安装)(建议安装)

安装

具体安装过程可以查看博主另外一篇文章

https://blog.csdn.net/a34569345/article/details/132779146?spm=1001.2014.3001.5501

如果在线的docker镜像下载不了,可以下载离线包加载为镜像,离线包已放在上面网盘中

bash 复制代码
docker load -i elasticsearch-head.tar

Kibana

安装

  • 解压到相应目录
bash 复制代码
tar -zxvf kibana-8.14.3-linux-x86_64.tar.gz -C /opt/elk
  • 修改配置
bash 复制代码
vim /opt/elk/kibana-8.14.3/conifg/kibana.yml
bash 复制代码
server.port: 5601 
server.host: "0.0.0.0" 
elasticsearch.hosts: ["http://192.168.0.2:9200"] 
  • 创建启动/重启脚本文件
bash 复制代码
vim /opt/elk/restartKibana.sh
bash 复制代码
# 端口号
PORT=5601
# 杀进程 
for port in ${PORT}
do
    pid=`netstat -lnp | grep $port | awk '{print $7}' | awk -F"/" '{ print $1 }' | head -1`
    if  [ ! -n "$pid" ] ;then
        continue
    else
        kill -9 $pid
    fi
done

sleep 2
# 启动
# kibana默认不允许root⽤户启动,可以加--allow-root选项
nohup sh /opt/elk/kibana-8.14.3/bin/kibana --allow-root > kibana.log 2>&1 &

启动

执行时如果提示netstat不是内部命令等错误,请自行安装linux 相应命令,如果不想安装,restartKibana.sh文件可以只添加最后一行

bash 复制代码
sh /opt/elk/restartKibana.sh

在浏览器打开http://192.168.0.2:5601/,如果出现下面信息,则表示成功

切换中文

在/opt/elk/kibana-8.14.3/conifg/kibana.yml 添加,并重启

bash 复制代码
vim /opt/elk/kibana-8.14.3/conifg/kibana.yml
bash 复制代码
i18n.locale: "zh-CN"

Logstash

安装

  • 解压到相应目录
bash 复制代码
tar -zxvf logstash-8.14.3-linux-x86_64.tar.gz -C /opt/elk
  • 新增配置文件
bash 复制代码
vim /opt/elk/logstash-8.14.3/bin/logstash-elasticsearch.conf
bash 复制代码
# 以下是收集nginx日志
input {
  file {
        type => "my_nginx"
        path => "/usr/local/nginx/logs/*.log"
        # start_position => beginning :初始数据时开放,后续要关闭,不然重启后又会将所有日志都收集到es中
        start_position => beginning
        sincedb_path => "/dev/null"
        codec => plain {
                format => "%{message}%"
        }
  }
}

filter {
        if[type] == "my_nginx"
        {
                grok {
                        match => { "message" => "%{IPORHOST:remote_addr} - %{DATA:remote_user} \[%{HTTPDATE:timestamp}\] \"%{WORD:request_method} %{DATA:uri} HTTP/%{NUMBER:http_version}\" %{NUMBER:response_code} %{NUMBER:body_sent_bytes} \"%{DATA:http_referrer}\" \"%{DATA:http_user_agent}\"" }
                 }
                date {
                        match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
                }
                geoip {
                        source => ["remote_addr"]
                        target => ["geoip"]
                        database => "/opt/elk/geoiplite2_city/GeoLite2-City.mmdb"
                }
        }
}

output {
        if [type] == "my_nginx"
        {
                elasticsearch {
                        hosts => '192.168.0.2:9200'
                        index => 'my_nginx'
                }
        }

        stdout {
                codec => rubydebug
        }
}

注意:配置文件的参数说明请百度查看,GeoLite2-City.mmdb文件在上面网盘中获取

bash 复制代码
vim /opt/elk/startLogstash.sh
bash 复制代码
# --config.reload.automatic : 表示配置文件修改,会重新加载
nohup sh /opt/elk/logstash-8.14.3/bin/logstash -f /opt/elk/logstash-8.14.3/bin/logstash-elasticsearch.conf --config.reload.automatic >> logstash.log 2>&1 &

启动

bash 复制代码
sh /opt/elk/startLogstash.sh
  • 如果安装了elasticsearch-head,浏览器打开192.168.0.2:9100页面如果有my_nginx,表示成功

kibana查看,打开索引管理,如果有my_nginx,表示成功


三、使用kibana

Discover

  • 创建数据视图

Dashboards

  • 创建可视化

Maps

  • 添加图层

  • 选择完视图后,会发现提示数据视图不包含任何地理空间字段,下面需要做一些配置

复制索引的映射

打开my_nginx->映射->List->复制,保存复制出来的字段映射

复制出来的这个geoip是重点

创建索引模板

每页安装以下配置即可

索引设置中配置

bash 复制代码
{
  "index": {
    "number_of_shards": "1",
    "refresh_interval": "5s"
  }
}

映射->加载JSON,把刚刚复制的粘贴进去,删掉第一个大括号、第一个mappings、最后一个大括号,location里面添加,点击加载并覆盖

bash 复制代码
"type": "geo_point"

删除数据视图

删除索引

重启logstash服务

重新创建数据视图

重新创建maps图层

这时就能看到访问的分配地址

相关推荐
程序员泠零澪回家种桔子3 小时前
分布式事务核心解析与实战方案
分布式
凯子坚持 c3 小时前
CANN 生态中的分布式训练利器:深入 `collective-ops` 项目实现高效多卡协同
分布式
惊讶的猫4 小时前
rabbitmq实践小案例
分布式·rabbitmq
禁默5 小时前
打破集群通信“内存墙”:手把手教你用 CANN SHMEM 重构 AIGC 分布式算子
分布式·重构·aigc
惊讶的猫7 小时前
rabbitmq初步介绍
分布式·rabbitmq
小镇敲码人7 小时前
华为CANN框架中HCCL仓库的全面解析:分布式通信的引擎
分布式·华为
User_芊芊君子8 小时前
【分布式训练】CANN SHMEM跨设备内存通信库:构建高效多机多卡训练的关键组件
分布式·深度学习·神经网络·wpf
酷酷的崽7988 小时前
CANN 开源生态解析(四):`cann-dist-train` —— 构建高效可扩展的分布式训练引擎
分布式·开源
惊讶的猫9 小时前
AMQP 与 RabbitMQ 四大模型
分布式·rabbitmq
灰子学技术9 小时前
istio从0到1:如何解决分布式配置同步问题
分布式·云原生·istio