elasticsearch日志分析
elasticsearch和mysql的区别一、安装配置实验环境:准备三台虚拟机,这三台虚拟机都要下载elasticsearch,7.6版本的就可以本次实验从真机中传过来的scp /home/westos/elasticsearch-7.6.1-x86_64.rpm server1:scp /home/westos/elasticsearch-7.6.1-x86_64.rpm server2:sc
目录
elasticsearch和mysql的区别
一、安装配置
实验环境:
准备三台虚拟机,这三台虚拟机都要下载elasticsearch,7.6版本的就可以
本次实验从真机中传过来的
scp /home/westos/elasticsearch-7.6.1-x86_64.rpm server1:
scp /home/westos/elasticsearch-7.6.1-x86_64.rpm server2:
scp /home/westos/elasticsearch-76.1-x86_64.rpm server3:
server1中:
rpm -ivh elasticsearch-7.6.1-x86_64.rpm
systemctl daemon-reload
cd /etc/elasticsearch/
ls
vim elasticsearch.yml
17:cluster.name: my-es
23 node.name: server1
43 bootstrap.memory_lock: true #不用swap分区的内存【内存不够的要注释掉】,这个命令存在,就要关闭swap分区【swapoff -a】
55 network.host: 0.0.0.0
59 http.port: 9200
68 discovery.seed_hosts: ["server1", "server2","server3"]
72 cluster.initial_master_nodes: ["server1", "server2","server3"]
grep -v ^# elasticsearch.yml
cd /var/log/elasticsearch/
ls
vim /etc/security/limits.conf
最后添加:elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
elasticsearch - nproc 4096
elasticsearch - nofile 65535
vim /usr/lib/systemd/system/elasticsearch.service
36 LimitMEMLOCK=infinity
swapoff -a #关掉swap分区
vim /etc/fstab
#注释掉最后一行
systemctl daemon-reload
systemctl restart elasticsearch.service
netstat -antpl
curl localhost:9200
把刚才编写的配置文件给server2传输过去
scp -p elasticsearch.yml server2:/etc/elasticsearch/
scp /etc/security/limits.conf server2:/etc/security/limits.conf
server2中:
rpm -ivh elasticsearch-7.6.1-x86_64.rpm
cd /etc/elasticsearch/
ls
vim elasticsearch.yml #配置文件根server1中修改一样,本次实验配置文件是由1中传过来的,所以只需要修改主机名,其他的在server1中已经修改过了
23 node.name: server2
**vim /etc/security/limits.conf #这个文件不用修改,server1中已经添加过了【server3同理】
vim /usr/lib/systemd/system/elasticsearch.service #【server3同理】
36 LimitMEMLOCK=infinity
swapoff -a
vim /etc/fstab #注释掉最后一行
systemctl daemon-reload
systemctl restart elasticsearch.service
curl localhost:9200
server3: 跟server2同理
vim /etc/elasticsearch/elasticsearch.yml #这个文件中的名词改为server3即可
vim /usr/lib/systemd/system/elasticsearch.service
添加:LimitMEMLOCK=infinity
##关掉swap分区,刷新后启动服务
curl localhost:9200 #查看配置安装是否成功
二、图形化操作工具
在真机中
cd ~ 【普通用户】
podman pull docker.io/lmenezes/cerebro
podman run -d --name cerebro -p 9000:9000 docker.io/lmenezes/cerebro
podman ps -a
podman start cerebro
podman ps
检测:172.25.70.250:9000
--登陆:http://172.25.70.1:9200 ##es的三个节点任何一个都可以链接
【选举出来master是server1】
head--可以做索引的浏览
真机中:# iptables -t nat -I POSTROUTING -s 172.25.70.0/24 -j MASQUERADE #让虚拟机可以上网
server1中:
yum install -y unzip bzip2 #下载依赖包
rpm -ivh nodejs-9.11.2-1nodesource.x86_64.rpm #安装nodejs的包
npm -v
node -v
npm install -g cnpm --registry=https://registry.npm.taobao.org #用互联网装cnpm,要求虚拟机可以联网
cd
ls
unzip elasticsearch-head-master.zip #head可以在官网直接下载压缩版的,
cd elasticsearch-head-master/ #一定要进到这个解压目录在cnpm install
ls
cnpm install #会自动使用国内的源来安装 【执行第一次报错,执行第二次就好了】
ls
cnpm run start &
bg
cd /etc/elasticsearch/
vim elasticsearch.yml
第59行后添加:
http.cors.enabled: true
http.cors.allow-origin: "*":
systemctl daemon-reload
systemctl restart elasticsearch.service
测试:172.25.70.1:9100/---[链接的时候要将localhost改为server1的ip,三个节点任何一个都可]
可以用图形化的方式添加索引信息
三、采集数据
保证有三个节点可以成为master,server1不存数据,server2、3用来存储数据
server1:
cd /etc/elasticsearch/
vim elasticsearch.yml #master端不存储数据
23行后添加:
node.master: true
node.data: false
node.ingest: true
node.ml: false
systemctl restart elasticsearch.service #此时启动会报错,因为这个节点上有数据
journalctl -xe #看报错信息
cd /usr/share/elasticsearch/bin/
systemctl stop elasticsearch.service
./elasticsearch-node repurpose
#把数据迁移走,这样master端就没有数据了【点击y】停掉服务之后才可以清理数据
cd
systemctl start elasticsearch.service #开启服务
server2、3中:
cd /etc/elasticsearch/
vim elasticsearch.ym
node.master: true
node.data: true #存数据
node.ingest: false #预处理关闭
node.ml: false #继续学习关闭
systemctl restart elasticsearch.service
测试:172.25.70.1:9100/-->可以看到server1是master了
采集数据:
需要重新开虚拟机4
安装logstash-7.6.1.rpm,【类似于管道,里面三个接管:输入、过滤、输出】
安装时候需要jdk
两个包都是传输过来的
server4:
rpm -ivh jdk-8u181-linux-x64.rpm #一点要先安装jdk
rpm -ivh logstash-7.6.1.rpm #安装完jdk在安装logstash,就不会报错了
cd /usr/share/logstash/
ls
cd bin/
pwd
ln -s /usr/share/logstash/bin/logstash /usr/bin/
which logstash
cd
logstash -e 'input { stdin { } } output { stdout {} }' #输入对应stdin;输出对应stdout
**看到successful就可以写数据了
**eg:linux、hello
cd /etc/logstash/conf.d/
ls
vim test.conf #把命令行的方式写道配置文件里
input {
stdin {} #输入
}
output {
stdout {} #输出
elasticsearch {
hosts => ["172.25.70.1:9200"] #可以接多个(连到2上)
index => "logstash-%{+yyyy.MM.dd}" #默认索引名
}
}
logstash -f /etc/logstash/conf.d/test.conf #-f指定【不启动服务,作测试】
**看到successful就可以写数据了
eg:linux
在网页上刷新可以看到刚才写的数据:redhat
四、 文件输入插件
cd /etc/logstash/conf.d/
vim test.conf
input {
#stdin {}
file {
path => "/var/log/messages"
start_position => "beginning"
}
}
output {
stdout {}
elasticsearch {
hosts => ["172.25.70.1:9200"]
index => "messages-%{+yyyy.MM.dd}"
}
}
ll /var/log/messages
id logstash
chmod 644 /var/log/messages
ll /var/log/messages
logstash -f /etc/logstash/conf.d/test.conf
在网页上刷新可以看到刚导入的messages数据\
!!注意:
在网页上删除刚导入的messages数据,要是想删除后重新导入一次会失败,因为logstash在读取文件时会有一个进度保存,为避免数据冗余在/usr/share/logstash/data/plugins/inputs/file/目录下删除sincedb文件,是文件的inode编号
具体做法:
在网页删除刚才读取的数据
server4中:
cd /usr/share/logstash/data/plugins/inputs/file/
l.
rm -rf .sincedb_452905a167cf4509fd08acb964fdb20c
cd
logstash -f /etc/logstash/conf.d/test.conf
在网页上刷新就又会出现刚才的数据了
五、syslog输入插件
采集每个系统节点的日志
cd /etc/logstash/conf.d/
vim test.conf
input {
#stdin {}
#file {
# path => "/var/log/messages"
# start_position => "beginning"
#}
syslog {
port => 514 #本机开启一个514端口,作为日志接受
}
}
output {
stdout {}
elasticsearch {
hosts => ["172.25.70.1:9200"]
index => "messages-%{+yyyy.MM.dd}"
}
}
logstash -f /etc/logstash/conf.d/test.conf
在连接一台server4,看下514端口有没有启动
netstat -antlp #查看514端口已经启动成功
在远端主机server1上:
vim /etc/rsyslog.conf
最后一行添加:*.* @@172.25.70.4:514
#把本级的*.*推送到172.25.70.4的514端口(就是logstash,把自己伪装成日志采集服务器了)
systemctl restart rsyslog.service
在server4中可以看到server1中日志已经发送到到server4上了
server2同理
server1中:
logger "hello world"
server4中接收到了1发送的日志
网页上可以直接在message中搜索hello world查看
目录
server1:/var/log/elasticsearch/的my-es.log文件后边会有报错
scp my-es.log server4:/var/log/
server4:
cd /etc/logstash/conf.d/
vim test.conf
input {
#stdin {}
file {
path => "/var/log/my-es.log"
start_position => "beginning"
}
#syslog {
# port => 514
#}
}
output {
stdout {}
elasticsearch {
hosts => ["172.25.70.1:9200"]
index => "myes-%{+yyyy.MM.dd}"
}
}
logstash -f /etc/logstash/conf.d/test.conf
在网页上刷新就会出现刚才采集的myes数据了 【但是日志记录的message识别是一行就是一条日志,应该是把一个整体作为日志的事件来记录】
cd /etc/logstash/conf.d/
vim test.conf
input {
#stdin {}
file {
path => "/var/log/my-es.log"
start_position => "beginning"
codec => multiline {
pattern => "^\[" #匹配的关键字
negate => true #是否匹配到
what => previous #要参与什么动作,此处为向上合并【next为向下合并】
}
}
#syslog {
# port => 514
#}
}
output {
stdout {}
elasticsearch {
hosts => ["172.25.70.1:9200"]
index => "myes-%{+yyyy.MM.dd}"
}
}
在网页上删掉之前读取的myes文件,让其重新读取记录
server4:
cd /usr/share/logstash/data/plugins/inputs/file/
l.
rm -rf .sincedb_13f094911fdac7ab3fa6f4c93fee6639
cd
logstash -f /etc/logstash/conf.d/test.conf
在网页上刷新就会出现刚才采集的myes数据了,z这次是记录了完整的采集日志
七、grok过滤插件
server4:
yum install -y httpd
echo server4 > /var/www/html/index.html
systemctl start httpd
curl localhost
真机中:
ab -c1 -n100 http://172.25.70.4/index.html
server4:
/var/log/httpd/access_log #存放着刚才的访问日志
cd /etc/logstash/conf.d/
vim test.conf
input {
file {
path => "/var/log/httpd/access_log"
start_position => "beginning"
}
}
filter {
grok {
match => { "message" => "%{HTTPD_COMBINEDLOG}" }
}
}
output {
stdout {}
elasticsearch {
hosts => ["172.25.70.1:9200"]
index => "apachelog-%{+yyyy.MM.dd}"
}
}
更多推荐
所有评论(0)