ELK部署(版本5x)

本文详细介绍如何部署ELK(Elasticsearch、Logstash、Kibana)堆栈,并提供配置示例,包括日志收集、解析及展示过程。适用于希望自行搭建日志分析平台的技术人员。

ELK部署(版本5x)

介绍

ELK部署需要较高配置机器,推荐16G内存、4核以及200G硬盘以上机器部署,否则性能会减弱。

日志收集方面,我采用了rsyslog服务去将客户端的日志传输到rsyslog的服务端,rsyslog和logstash在一台服务器上,elasticsearch和kibana在一台服务器上,一共用了三台服务器。

安装ELK

官方网站:https://www.elastic.co/分别下载elasticsearch、logstash、kibana,推荐下载rpm安装包,安装完成后需要进行修改配。

Logstash配置

首先需要将logstash的配置文件夹软连接到logstash安装目录

cd /usr/share/logstash
ln -s /etc/logstash config

然后创建解配置文件以nginx为例

#建议将不同类型的日志配置文件放入不同的目录以便于区分
mkdir -p /usr/share/logstash/config/conf.d/nginx_log

vim test_logstash.conf
input {
         file {
               type => "test"
               path => ["/www/log/test_*.log"]
               start_position => "beginning"
               }
filter {
    grok {
         match => ["message", "%{IPORHOST:clientip} - %{NOTSPACE:remote_user} \[%{HTTPDATE:timestamp}\] \"%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})\" (?:%{NUMBER:status}|-) (?:%{NUMBER:body_bytes_sent}|-) \"(%{NOTSPACE:http_referer}|-)\" \"(?:%{GREEDYDATA:http_user_agent}|-)\" \"(?:%{GREEDYDATA:http_x_forwarded_for}|-)\" \"(?:%{GREEDYDATA:request_time}|-)\" \"(?:%{GREEDYDATA:gzip_ratio}|-)\""]
         }
    mutate {
            remove_field => [ "tags" ]
           }

    date {
          match => ["timestamp" , "dd/MMM/YYYY:HH:mm:ss Z"]
          }
}

output {
# stdout { codec=> rubydebug }
     elasticsearch {
        hosts => ["192.168.1.213:9200"]
        index => "nginx-%{type}-%{+YYYY.MM.dd}"
        user => user
        password=> passwd

}
}

#=============================================
配置文件介绍:
input,用来表示输入的文件位置,例如我的日志目录在/var/log/test2017.9.10,则需要写成/www/log/test*.log

filter,用来表示需要解析的类型,我们最终是要在kibana上去分析日志,所以这里要写成方便观察的日志。解析规则是通过grok语言来写的,但是写的过程中要对应自己log语言来写,以nginx日志为例我的nginx服务器日志规则如下:
   log_format  main   '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" "$request_time" "$gzip_ratio"';
如果不一致,则需要自己去写。

mutate,如果日志记录出错,或者配置文件写错,会产生tags,利用mytate可以直接删除这个字段,减少报错日志。

output,表示输出到某个服务器,可以是redis,可以是数据库,我这边直接输出到了elasticsearch里。主意在配置完成后需要先别输出并且取消stdout { codec=> rubydebug }注释,输出到控制台上检测是否配置有问题。

配置完成后启动
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/nginx_log/test_logstash.conf &

如果想开机启动需要将命令放置到/etc/rc.local中

Elasticsearch配置

vim /etc/elasticsearch/elasticsearch.yml
cluster.name: es  #名称
node.name: node-1 #节点名称
path.data: /opt/elasticsearch/data  #存放数据 --建议挂在到数据盘上
path.logs: /opt/elasticsearch/logs  #存放日志 --建议挂在到数据盘上
network.host: ["192.168.1.213","127.0.0.1"]  #ip地址,此处与4.0等低版本有区别
http.port: 9200  #端口
#以下为优化
bootstrap.system_call_filter: false
node.master: true
node.data: true
action.search.shard_count.limit: 5000
#=====================================
#修改内存限制
vim /etc/elasticsearch/jvm.options
-Xms8g
-Xmx8g

Kibana配置

vim /etc/kibana/kibana.yml
server.port: 5601 #端口
elasticsearch.url: "http://127.0.0.1:9200" #elasticsearch ip地址
elasticsearch.username: "user" #安装x-pack插件后需要配置
elasticsearch.password: "passwd"
elasticsearch.requestTimeout: 100000 #查询超时时间,如果数据量巨大,服务器性能一般需要配置高些

服务器内核优化

vim /etc/sysctl.conf 
net.ipv4.ip_forward = 0
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
vm.swappiness = 0
net.ipv4.neigh.default.gc_stale_time=120
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_announce=2
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
vm.max_map_count=655360

#=======================
vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc  65536

#========================
vim /etc/security/limits.d/90-nproc.conf
*          soft    nproc     unlimited
root       soft    nproc     unlimited

全部完成后启动elk查看是否有报错,kibana能否收到日志。

安装插件

为了管理方便,需要增加权限控制功能,就需要用到x-pack插件

cd /usr/share/elasticsearch/
bin/elasticsearch-plugin install x-pack
service elasticsearch restart
cd /usr/share/kibana/
bin/kibana-plugin install x-pack
service kibana restart
#安装完成后就可以配置人员权限,但是这个试用期30天,需要每月重装一次,如果不想麻烦,需要去官网申请认证。

辅助脚本

为了减少人工维护成本,需要脚本维护

#如果硬盘不是很大则需要定期删除数据,每天执行一次
#/bin/bash
#删除30天前数据
date1=`date +%Y.%m.%d --date="-30 day"`
curl -u user:passwd -XDELETE 'http://127.0.0.1:9200/*-'${date1}''

#如果单个节点的话会生成大量的UNASSIGNED,这个脚本可以设置每隔几小时清理一次
# !/bin/bash
DATE=$(date '+%Y-%m-%d %H:%M:%S')
Status=$(curl -u user:passwd -s "http://localhost:9200/_cat/shards" | grep UNASSIGNED | grep -v grep | wc -l)
if [ $Status -eq 0 ]; then
        echo "$DATE 无未分配分片" >> /var/log/status.log
else
        echo "$DATE 有未分配分片" >> /var/log/status.log
        curl -u user:passwd -XPUT "http://localhost:9200/_settings" -d' {  "number_of_replicas" : 0 } '
fi
<think>我们正在为AlmaLinux9.6单机部署ELK8.17版本ELK包括Elasticsearch,Logstash,Kibana三个组件。根据引用内容,我们需要注意以下几点:1.不能使用root用户运行,需要创建专用用户(如elk)并授权。2.需要调整系统设置(如文件描述符、虚拟内存等)以满足Elasticsearch的要求。3.可能需要调整JVM堆内存设置(根据服务器内存情况)。4.安装过程包括下载解压、配置、启动、验证等步骤。由于引用中提供了部分步骤,但针对的是不同的Linux发行版(Ubuntu)或不同版本,我们将结合AlmaLinux的特点进行调整。以下是详细步骤:###1.准备工作-确保服务器满足要求:至少4GB内存(推荐8GB),JDK(Elasticsearch8.17自带OpenJDK,无需单独安装)。-更新系统:```bashsudodnfupdate-y```-安装常用工具:```bashsudodnfinstallwgettar-y```###2.创建ELK用户和组ELK不能以root运行,因此创建专用用户和组:```bashsudogroupaddelksudouseradd-gelkelk```###3.下载ELK8.17在`/usr/local`目录下创建elk目录,并下载解压:```bashsudomkdir/usr/local/elksudochownelk:elk/usr/local/elkcd/usr/local/elk```下载Elasticsearch、Kibana、Logstash(注意版本号一致):```bashsudo-uelkwgethttps://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.17.3-linux-x86_64.tar.gzsudo-uelkwgethttps://artifacts.elastic.co/downloads/kibana/kibana-8.17.3-linux-x86_64.tar.gzsudo-uelkwgethttps://artifacts.elastic.co/downloads/logstash/logstash-8.17.3-linux-x86_64.tar.gz```解压:```bashsudo-uelktar-zxvfelasticsearch-8.17.3-linux-x86_64.tar.gzsudo-uelktar-zxvfkibana-8.17.3-linux-x86_64.tar.gzsudo-uelktar-zxvflogstash-8.17.3-linux-x86_64.tar.gz```删除压缩包(可选):```bashsudo-uelkrm*.tar.gz```###4.配置Elasticsearch进入Elasticsearch目录:```bashcdelasticsearch-8.17.3```修改配置文件`config/elasticsearch.yml`:```bashsudo-uelkvimconfig/elasticsearch.yml```修改以下配置(根据单机部署调整):```yaml#设置集群名称(单节点)cluster.name:my-elk-cluster#设置节点名称node.name:node-1#设置数据存储路径(确保elk用户有权限)path.data:/usr/local/elk/elasticsearch-8.17.3/data#设置日志存储路径path.logs:/usr/local/elk/elasticsearch-8.17.3/logs#设置监听地址(允许任何IP访问,生产环境应限制)network.host:0.0.0.0#设置HTTP端口http.port:9200#单节点发现配置discovery.type:single-node```(可选)修改JVM堆内存设置(`config/jvm.options`),根据服务器内存调整,例如:```bashsudo-uelkvimconfig/jvm.options```将`-Xms`和`-Xmx`设置为相同值,例如2GB(根据服务器内存调整):```-Xms2g-Xmx2g```####调整系统设置Elasticsearch需要调整系统参数:-修改`/etc/security/limits.conf`:```bashsudovim/etc/security/limits.conf```添加:```elksoftnofile65536elkhardnofile65536elksoftnproc4096elkhardnproc4096```-修改`/etc/sysctl.conf`:```bashsudovim/etc/sysctl.conf```添加:```vm.max_map_count=262144```应用:```bashsudosysctl-p```###5.启动Elasticsearch切换到elk用户,并启动(后台启动):```bashsudo-uelk-icd/usr/local/elk/elasticsearch-8.17.3./bin/elasticsearch-d```退出elk用户(按Ctrl+D或输入`exit`)。验证启动:```bashcurlhttp://localhost:9200```应返回包含`YouKnow,forSearch`的JSON信息。###6.配置Kibana进入Kibana目录:```bashcd/usr/local/elk/kibana-8.17.3```修改配置文件`config/kibana.yml`:```bashsudo-uelkvimconfig/kibana.yml```修改以下配置:```yamlserver.port:5601server.host:"0.0.0.0"#连接Elasticsearch(本机)elasticsearch.hosts:["http://localhost:9200"]#设置Kibana界面语言为中文(可选)i18n.locale:"zh-CN"```###7.启动Kibana以elk用户启动(后台启动):```bashsudo-uelk-icd/usr/local/elk/kibana-8.17.3./bin/kibana&```退出elk用户。验证启动:```bashcurlhttp://localhost:5601```或通过浏览器访问`http://服务器IP:5601`。###8.配置Logstash(可选)如果不需要Logstash(例如直接使用Filebeat),可跳过。这里简单配置一个测试管道。进入Logstash目录:```bashcd/usr/local/elk/logstash-8.17.3```创建配置文件`config/logstash-sample.conf`:```bashsudo-uelkvimconfig/logstash-sample.conf```内容示例(从标准输入接收,输出到标准输出和Elasticsearch):```confinput{stdin{}}output{elasticsearch{hosts=>["http://localhost:9200"]index=>"logstash-test-%{+YYYY.MM.dd}"}stdout{}}```启动Logstash(测试):```bashsudo-uelk./bin/logstash-fconfig/logstash-sample.conf```在控制台输入一些文本,观察是否输出到Elasticsearch。###9.设置服务自启动(可选)为了方便,可以创建systemd服务文件。####Elasticsearch服务创建`/etc/systemd/system/elasticsearch.service`:```bashsudovim/etc/systemd/system/elasticsearch.service```内容:```[Unit]Description=ElasticsearchAfter=network.target[Service]User=elkGroup=elkWorkingDirectory=/usr/local/elk/elasticsearch-8.17.3ExecStart=/usr/local/elk/elasticsearch-8.17.3/bin/elasticsearchRestart=alwaysRestartSec=3LimitNOFILE=65536[Install]WantedBy=multi-user.target```####Kibana服务创建`/etc/systemd/system/kibana.service`:```bashsudovim/etc/systemd/system/kibana.service```内容:```[Unit]Description=KibanaAfter=network.targetelasticsearch.service[Service]User=elkGroup=elkWorkingDirectory=/usr/local/elk/kibana-8.17.3ExecStart=/usr/local/elk/kibana-8.17.3/bin/kibanaRestart=alwaysRestartSec=3[Install]WantedBy=multi-user.target```####Logstash服务(可选)创建`/etc/systemd/system/logstash.service`:```bashsudovim/etc/systemd/system/logstash.service```内容:```[Unit]Description=LogstashAfter=network.targetelasticsearch.service[Service]User=elkGroup=elkWorkingDirectory=/usr/local/elk/logstash-8.17.3ExecStart=/usr/local/elk/logstash-8.17.3/bin/logstashRestart=alwaysRestartSec=3[Install]WantedBy=multi-user.target```启用服务:```bashsudosystemctldaemon-reloadsudosystemctlenableelasticsearchkibanasudosystemctlstartelasticsearchkibana#如果需要logstashsudosystemctlenablelogstashsudosystemctlstartlogstash```###10.安全配置(可选)Elasticsearch8.x默认开启安全功能,首次启动时会生成密码和证书。在单节点且测试环境下,可以禁用安全(不推荐生产):在`elasticsearch.yml`中添加:```yamlxpack.security.enabled:false```然后重启Elasticsearch。如果启用安全,则需要配置Kibana使用用户名密码(在Kibana配置中设置`elasticsearch.username`和`elasticsearch.password`)。###总结以上步骤完成了在AlmaLinux9.6上单机部署ELK8.17。现在可以通过浏览器访问Kibana(端口5601)进行日志可视化管理。§§相关问题§§1.如何配置Filebeat将日志发送到ELK?2.如何为Elasticsearch和Kibana配置SSL/TLS加密?3.在ELK中如何创建索引模式并可视化数据?4.如何备份和恢复Elasticsearch数据?</think>### AlmaLinux 9.6 单机部署 ELK 8.17 完整指南 #### 一、准备工作 1. **系统更新** ```bash sudo dnf update -y sudo reboot ``` 2. **创建专用用户** ELK 禁止使用 root 运行: ```bash sudo groupadd elk sudo useradd elk -g elk -p elkpassword sudo mkdir /usr/local/elk sudo chown -R elk:elk /usr/local/elk ``` 3. **安装依赖** ```bash sudo dnf install tar wget java-17-openjdk -y ``` --- #### 二、安装 Elasticsearch 8.17 1. **下载并解压** ```bash cd /usr/local/elk sudo -u elk wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.17.3-linux-x86_64.tar.gz sudo -u elk tar -zxvf elasticsearch-8.17.3-linux-x86_64.tar.gz ``` 2. **修改 JVM 堆配置**(可选) ```bash sudo -u elk vim elasticsearch-8.17.3/config/jvm.options ``` 修改(例如 2GB 内存服务器): ```ini -Xms1g -Xmx1g ``` 3. **调整系统参数** ```bash sudo vim /etc/security/limits.conf ``` 添加: ```ini elk soft nofile 65535 elk hard nofile 65535 elk soft nproc 4096 ``` ```bash sudo vim /etc/sysctl.conf ``` 添加: ```ini vm.max_map_count=262144 ``` 应用配置: ```bash sudo sysctl -p ``` 4. **启动 Elasticsearch** ```bash sudo -u elk /usr/local/elk/elasticsearch-8.17.3/bin/elasticsearch -d ``` 验证: ```bash curl http://localhost:9200 # 应返回 "You Know, for Search" ``` --- #### 三、安装 Kibana 8.17 1. **下载并解压** ```bash cd /usr/local/elk sudo -u elk wget https://artifacts.elastic.co/downloads/kibana/kibana-8.17.3-linux-x86_64.tar.gz sudo -u elk tar -zxvf kibana-8.17.3-linux-x86_64.tar.gz ``` 2. **配置 Kibana** ```bash sudo -u elk vim kibana-8.17.3/config/kibana.yml ``` 修改关键参数: ```yaml server.port: 5601 server.host: "0.0.0.0" elasticsearch.hosts: ["http://localhost:9200"] ``` 3. **启动 Kibana** ```bash sudo -u elk /usr/local/elk/kibana-8.17.3/bin/kibana & ``` 访问:`http://<服务器IP>:5601` --- #### 四、安装 Logstash 8.17(可选) 1. **下载并解压** ```bash cd /usr/local/elk sudo -u elk wget https://artifacts.elastic.co/downloads/logstash/logstash-8.17.3-linux-x86_64.tar.gz sudo -u elk tar -zxvf logstash-8.17.3-linux-x86_64.tar.gz ``` 2. **基础配置** 创建测试配置文件: ```bash sudo -u elk vim /usr/local/elk/logstash-8.17.3/config/logstash-sample.conf ``` 内容: ```ruby input { stdin {} } output { elasticsearch { hosts => ["localhost:9200"] } stdout {} } ``` 3. **启动测试** ```bash sudo -u elk /usr/local/elk/logstash-8.17.3/bin/logstash -f config/logstash-sample.conf ``` --- #### 五、防火墙配置 ```bash sudo firewall-cmd --permanent --add-port={9200/tcp,5601/tcp} sudo firewall-cmd --reload ``` --- #### 六、验证部署 | 组件 | 访问方式 | 预期结果 | |---------------|--------------------------|-----------------------| | Elasticsearch | `curl http://localhost:9200` | JSON 包含版本信息 | | Kibana | `http://<IP>:5601` | Kibana 欢迎界面 | | Logstash | 控制台输入文本 | 文本显示在终端/ES | [^1][^2] --- #### 常见问题解决 1. **启动权限错误** 检查目录权限:`sudo chown -R elk:elk /usr/local/elk` 2. **端口占用** 查看占用进程:`sudo ss -tulnp | grep 9200` 3. **内存不足** 调整 JVM 堆大小或添加交换空间: ```bash sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 sudo mkswap /swapfile sudo swapon /swapfile ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值