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图层

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

相关推荐
艾希逐月12 小时前
分布式唯一 ID 生成方案
分布式
齐木卡卡西在敲代码15 小时前
kafka的pull的依据
分布式·kafka
lllsure16 小时前
RabbitMQ 基础
分布式·rabbitmq
DN金猿19 小时前
rabbitmq发送的延迟消息时间过长就立即消费了
分布式·rabbitmq
程序员不迷路1 天前
Kafka学习
分布式·kafka
北i1 天前
ZooKeeper 一致性模型解析:线性一致性与顺序一致性的平衡
分布式·zookeeper·云原生
IT技术小密圈1 天前
图解分布式锁: 5分钟搞懂分布式锁
分布式·后端·面试
bing_1581 天前
kafka 生产者是如何发送消息的?
分布式·kafka
Monly211 天前
RabbitMQ:数据隔离
分布式·rabbitmq
萧鼎1 天前
Python pyzmq 库详解:从入门到高性能分布式通信
开发语言·分布式·python