centos7 部署 ELK
PS:注意系统时间设置
ELK(elasticsearch、logstash、kibana)可以作为日志收集及分析的一整套系统,通过阿里的普及也有越来越多的公司在使用,使用下来功能还可以,这里整理记录一个部署手册。
为了方便,将ELK都部署在一台os里。
1.注意时间设置
2.yum -y install httpd-tools 安装httpwd工具
3.nginx配置文件放到/etc/nginx/conf.d
server { listen 8088; server_name 192.168.x.x; root html; index index.html index.htm; location / { proxy_pass http://192.168.200.114:5601$request_uri; auth_basic "登陆验证"; auth_basic_user_file /etc/nginx/htpasswd; #/etc/nginx/htpasswd是密码文件,路径自定义 } }
htpasswd -cm /etc/nginx/htpasswd kibana 添加密码
一、环境准备
操作系统:centos7(CentOS-7-x86_64-Minimal-1708)
CPU:1核
内存:4G
可以在你的windows上安装Bitvise SSH Client远程执行命令行和传输文件。
# 安装vim、wget
yum install -y vim wget
二、安装java环境
根据官方的描述,
Elasticsearch要求是java8以上。
Logstash要求是Java 8,不支持Java 9。
官网:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
进入后,选择“Accept License Agreement”, 在自己电脑下载“jdk-8u151-linux-x64.rpm”,通过Bitvise SSH Client上传到/root目录下。
# 安装
cd rpm -ivh jdk-8u151-linux-x64.rpm
# 可以用下面的命令查看java的环境变量是否生效
java -version
出现下面的内容就说明java的jdk已经部署完成。
# 删除安装包(非必要,用于生产环境建议删除)
rm -rf /root/jdk-8u151-linux-x64.tar.gz
三、部署Elasticsearch
3.1 yum安装Elasticsearch
# 获取rpm包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.7.0.rpm
# 安装
rpm -ivh elasticsearch-6.1.0.rpm
#查找安装路径
rpm -ql elasticsearch
一般是装在/usr/share/elasticsearch/下。
3.2 设置data的目录
# 创建/data/es-data目录,用于elasticsearch数据的存放
mkdir -p /data/es-data
# 修改该目录的拥有者为elasticsearch
chown -R elasticsearch:elasticsearch /data/es-data
3.3 设置log的目录
# 创建/data/es-log目录,用于elasticsearch日志的存放
mkdir -p /log/es-log
# 修改该目录的拥有者为elasticsearch
chown -R elasticsearch:elasticsearch /log/es-log
3.4 修改配置文件elasticsearch.yml
vim /etc/elasticsearch/elasticsearch.yml
根据下面的内容进行修改,wq保存。
#设置data存放的路径为/data/es-data path.data: /data/es-data #设置logs日志的路径为/log/es-log path.logs: /log/es-log #设置内存不使用交换分区 bootstrap.memory_lock: false #配置了bootstrap.memory_lock为true时反而会引发9200不会被监听,原因不明 #设置允许所有ip可以连接该elasticsearch network.host: 0.0.0.0 #开启监听的端口为9200 http.port: 9200 #增加新的参数,为了让elasticsearch-head插件可以访问es (5.x版本,如果没有可以自己手动加) http.cors.enabled: true http.cors.allow-origin: "*"
3.5 启动Elasticsearch
# 启动
systemctl start elasticsearch
# 查看状态
systemctl status elasticsearch
# 设置开机启动
systemctl enable elasticsearch
3.6 开启9200端口
firewall-cmd --add-port=9200/tcp --permanent firewall-cmd --reload
3.7 测试安装是否成功
# 安装net-tools
yum install -y net-tools
# 检查9200是否有监听
netstat -antp |grep 9200
curl http://127.0.0.1:9200
有下面类似的内容才说明elasticsearch正常启动。
四、部署Logstash
4.1 yum安装Logstash
# 获取rpm包
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.7.0.rpm
# 安装
rpm -ivh logstash-6.1.0.rpm
4.2 设置data的目录
# 创建/data/ls-data目录,用于logstash数据的存放
mkdir -p /data/ls-data
# 修改该目录的拥有者为logstash
chown -R logstash:logstash /data/ls-data
4.3 设置log的目录
# 创建/data/ls-log目录,用于logstash日志的存放
mkdir -p /log/ls-log
# 修改该目录的拥有者为logstash
chown -R logstash:logstash /log/ls-log
4.4 修改配置文件logstash.yml
vim /etc/logstash/logstash.yml
根据下面的内容进行修改,wq保存。
# 设置数据的存储路径为/data/ls-data path.data: /data/ls-data # 设置管道配置文件路径为/etc/logstash/conf.d path.config: /etc/logstash/conf.d # 设置日志文件的存储路径为/log/ls-log path.logs: /log/ls-log
4.5 启动Logstash
# 启动
systemctl start logstash
# 查看状态
systemctl status logstash
# 设置开机启动
systemctl enable logstash
4.6 测试安装是否成功
# 查看下logstash的安装目录
rpm -ql logstash
# 创建一个软连接,每次执行命令的时候不用在写安装路径(yum安装是在/usr/share下)
ln -s /usr/share/logstash/bin/logstash /bin/
# 执行logstash的命令
logstash -e 'input { stdin { } } output { stdout {} }'
等待片刻后出现“The stdin plugin is now waiting for input:”,输入“abc”回车,有返回的输出。
ctrl+c退出。
如果标准输出还有elasticsearch中都需要保留,看下面
# 192.168.12.16是试验elk的ip
/usr/share/logstash/bin/logstash -e 'input { stdin { } } output { elasticsearch { hosts => ["192.168.12.16:9200"] } stdout { codec => rubydebug }}'
等待片刻后出现“The stdin plugin is now waiting for input:”,输入“test”回车,返回下面标准的输出。
五、部署Kibana
5.1 yum安装Kibana
# 获取安装包
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.7.0-x86_64.rpm
# 安装
rpm -ivh kibana-6.1.0-x86_64.rpm
5.2 修改kibana.yml
# 搜索rpm包
rpm -ql kibana
默认是装在/usr/share/kibana/下。
# 修改kibana的配置文件
vim /etc/kibana/kibana.yml
# 修改kibana.xml下面的内容,wq保存。
#kibana页面映射在5601端口
server.port: 5601
#允许所有ip访问5601端口 server.host: "0.0.0.0" #elasticsearch所在的ip及监听的地址 elasticsearch.url: "http://localhost:9200" kibana.index: ".kibana"
#汉化
i18n.defaultLocale: "zh-CN"
5.3 启动Kibana
# 启动
systemctl start kibana
# 查看状态
systemctl status kibana
# 设置开机启动
systemctl enable kibana
5.4 开放端口5601
# 设置防火墙
firewall-cmd --add-port=5601/tcp --permanent firewall-cmd --reload
5.5配置网络设备日志接收脚本
命令放到后台执行,不需要产生过多日志文件
1 | switch.conf |
input{ tcp { port => 5002 type => "Cisco"} udp { port => 514 type => "HUAWEI"} udp { port => 5002 type => "Cisco"} udp { port => 5003 type => "H3C"} } filter { if [type] == "Cisco" { grok { match => { "message" => "<%{BASE10NUM:syslog_pri}>%{NUMBER:log_sequence}: .%{SYSLOGTIMESTAMP:timestamp}: %%{DATA:facility}-%{POSINT:severity}-%{CISCO_REASON:mnemonic}: %{GREEDYDATA:message}" } match => { "message" => "<%{BASE10NUM:syslog_pri}>%{NUMBER:log_sequence}: %{SYSLOGTIMESTAMP:timestamp}: %%{DATA:facility}-%{POSINT:severity}-%{CISCO_REASON:mnemonic}: %{GREEDYDATA:message}" } add_field => {"severity_code" => "%{severity}"} overwrite => ["message"] } } elseif [type] == "H3C" { grok { match => { "message" => "<%{BASE10NUM:syslog_pri}>%{SYSLOGTIMESTAMP:timestamp} %{YEAR:year} %{DATA:hostname} %%%{DATA:vvmodule}/%{POSINT:severity}/%{DATA:digest}: %{GREEDYDATA:message}" } remove_field => [ "year" ] add_field => {"severity_code" => "%{severity}"} overwrite => ["message"] } } elseif [type] == "HUAWEI" { grok { match => { "message" => "<%{BASE10NUM:syslog_pri}>%{SYSLOGTIMESTAMP:timestamp} %{DATA:hostname} %%%{DATA:ddModuleName}/%{POSINT:severity}/%{DATA:Brief}:%{GREEDYDATA:message}"} match => { "message" => "<%{BASE10NUM:syslog_pri}>%{SYSLOGTIMESTAMP:timestamp} %{DATA:hostname} %{DATA:ddModuleName}/%{POSINT:severity}/%{DATA:Brief}:%{GREEDYDATA:message}"} remove_field => [ "timestamp" ] add_field => {"severity_code" => "%{severity}"} overwrite => ["message"] } } #mutate { # gsub => [ # "severity", "0", "Emergency", # "severity", "1", "Alert", # "severity", "2", "Critical", # "severity", "3", "Error", # "severity", "4", "Warning", # "severity", "5", "Notice", # "severity", "6", "Informational", # "severity", "7", "Debug" # ] # } } output{ stdout { codec => rubydebug } elasticsearch { index => "syslog-%{+YYYY.MM.dd}" hosts => ["192.168.200.114:9200"] user => "elastic" password => "password" } }
1 | nohup logstash -f /etc/logstash/conf .d /switch .conf > /dev/null 2>&1 & |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律