项目需要,记录一次ELK日志分析系统无坑初始安装过程,并给大家整理出了操作elasticsearch的主要命令,elasticsearch!伙伴们都懂得哦!别的不多说,看过内容概览,直接开整!!! 一、系统调优 11修改etcsecuritylimits。conf limits。conf文件限制着用户可以使用的最大文件数,最大线程,最大内存等资源使用量,在最后追加内容:hardnofile65535允许es启动用户softnofile65535esnproc4096es可以当启动用户启动用户说明:soft是一个警告值,而hard则是一个真正意义的阀值,超过就会报错 12修改etcsysctl。conf 追加内容:vm。maxmapcount262144 13执行下面命令,修改内核参数马上生效,sbinsysctlp 对应的procsysvmmaxmapcount会自动修改数值。 二、Elasticsearch安装 21初次创建elasticsearch容器 211下载镜像dockerpullelasticsearch:7。3。0 212创建elasticsearch容器,映射9200,9300端口,指定环境变量discovery。type,这个很重要,否则无法启动dockerrundinameelasticsearchp9200:9200p9300:9300ediscovery。typesinglenodeeESJAVAOPTSXms512mXmx512m镜像名字或ID 213防火墙放行9200端口firewallcmdzonepublicaddport9200tcppermanentfirewallcmdreloadfirewallcmdlistports 214访问IP地址:9200,测试是否启动成功 22使9300端口有效 221进入容器:dockerexecit容器名称或者idbinbash 此时,我们看到elasticsearch所在的目录为usrshareelasticsearch 222进入config看到了配置文件elasticsearch。yml 此处有多种方式修改elasticsearch。yml配置文件,推荐拷贝出来到宿主机上,然后进行目录挂载 223拷贝容器内elasticsearch。yml文件到宿主机,前提条件是: 容器必须是运行中 退出容器内部exit 宿主机的目录已经创建好 执行拷贝dockercp必须是容器名称:usrshareelasticsearchconfigelasticsearch。ymlusrlocalelasticsearchconfigelasticsearch。yml注意:前面的路径是容器内的,后面的路径是宿主机的 224停止和删除现在运行中的elasticsearch容器 225修改usrlocalelasticsearchelasticsearch。ymlcluster。name:dockerclusternetwork。host:0。0。0。0http。port:9200transport。tcp。port:9300http。cors。enabled:truehttp。cors。alloworigin: 23二次创建elasticsearch容器 231本地创建es挂载目录,并赋予各目录777权限chmod777usrlocalelasticsearchpluginschmod777usrlocalelasticsearchdatachmod777usrlocalelasticsearchconfig 232二次创建elasticsearch容器dockerrundinameelasticsearchp9200:9200p9300:9300ediscovery。typesinglenodeeESJAVAOPTSXms512mXmx512mvusrlocalelasticsearchdata:usrshareelasticsearchdatavusrlocalelasticsearchplugins:usrshareelasticsearchpluginsvusrlocalelasticsearchconfigelasticsearch。yml:usrshareelasticsearchconfigelasticsearch。yml镜像名字或ID 233再次访问:IP9200 24向容器中添加ik分词器 此处要注意版本,要和elasticsearch版本一致,此处为7。3。0 241ik分词器下载地址 和本例elasticsearch版本配套,已设置好 百度网盘链接:https:pan。baidu。coms1K2mWiiHJxyXsJVaAoWcvQ 提取码:7zge 242将ik文件夹上传至宿主机elasticsearch挂载目录 243进入容器查看:dockerexecit容器名或者idbinbash 244设置自定义词库:此步骤可以根据自己的需要设定词库,如果设置的话在上传ik文件夹之前完成设置 245从新启动容器三、elasticsearchheader安装 31下载镜像dockerpullwallbaseelasticsearchhead:6alpine 32修改usrlocalelasticsearchelasticsearch。yml文件,添加跨域支持,本例前面已经添加过,没有添加的可以在此处补上开启cors跨域访问支持,默认为falsehttp。cors。enabled:true跨域访问允许的域名地址,(允许所有域名)以上使用正则http。cors。alloworigin:。 33创建elasticsearchhead容器dockerrundinameelasticsearchheadp9100:9100容器名称或ID 34访问IP9100 四、Logstash安装 41拉取镜像dockerpulllogstash:7。3。0 42创建容器并启动logstashdockerrundip5044:5044p9600:9600namelogstash容器名称或ID 43拷贝容器内的config文件夹到到宿主机,以便将来在宿主机中直接修改logstash配置语法:dockercp容器名称或ID:容器内路径宿主机路径dockercplogstash:usrsharelogstashconfigusrlocallogstash 本例侧重先把logstash部署起来,故先只修改一个配置文件logstash。yml,其它配置文件的修改,在以后的logstash具体配置时详述http。host:0。0。0。0xpack。monitoring。elasticsearch。hosts:〔http:自己的elasticsearch的ip:9200〕 44删除容器 45再次创建带宿主机配置文件的容器dockerrundinamelogstashp5044:5044p9600:9600vusrlocallogstashconfiglogstash。yml:usrsharelogstashconfiglogstash。ymlvusrlocallogstashconfigjvm。options:usrsharelogstashconfigjvm。optionsvusrlocallogstashconfiglogstashsample。conf:usrsharelogstashconfiglogstashsample。confvusrlocallogstashconfigpipelines。yml:usrsharelogstashconfigpipelines。yml容器名称或id 46查看logstash启动成功信息dockerlogsflogstash 五、kibana安装 51拉取镜像dockerpullkibana:7。3。0 52创建容器dockerrundinamekibanaeELASTICSEARCHURLhttp:192。168。0。142:9200p5601:5601kibana:7。3。0本例没有进行配置文件挂载,采取的创建容器添加环境变量e的方式直接指定elasticsearch的ip 53修改配置文件 进入容器config目录下进行kibana。yml文件修改,把elasticsearch的地址修改成部署的elasticsearch地址dockerexecituserrootkibanabashvikibana。yml 54退出并重启kibana容器 55访问地址http:192。168。0。142:5601 至此,完成elasticsearch、logstash、kibana基础安装,后续将会对ELK进行深入配置。六、操作elasticsearch主要命令 61操作索引及映射 注释 创建索引 PUT索引名称 空索引,没有设置和映射PUT索引名称 { settings:{ 设置内容 }, mappings:{ properties:{ 字段设定 } } } 不推荐:带设置和映射的索引PUT索引名称 { settings:{ 设置内容 }, mappings:{ properties:{ 字段名:{ type:数据类型, analyzer:分词器类型 } } } }推荐:设置映射字段指定分词器的索引 分词器类型内置 standard:英文按照单词切分,并小写处理 whitespace:按照空格切分,不转小写 keyword:不分词,直接将输入作为分词 分词器类型插件ik分词器 iksmart:粗颗粒度分词 ikmaxword:细颗粒度分词 查看索引 GET索引名称 查看索引映射 GET索引名称mapping 查看所有索引 GETcatindices?v:以表格形式查看 删除索引 DELETE索引名称 DELETE删除所有索引,慎用,会导致kibana不能用,重启后才可用 62操作文档 注释 插入一条文档PUT索引名称doc文档id {数据定义} 指定id方式POST索引名称doc {数据定义} 自动生成id方式,数据定义中不要写id字段 根据id查看文档 GET索引名称doc文档id 根据id删除文档 DELETE索引名称doc文档id 更新文档PUT索引名称doc文档id {要更新的数据} 不保留原始数据,先删除原始数据,然后再插入一条新数据POST索引名称doc文档idupdate { doc:{ 要更新的数据 } } 保留原始数据进行更新 批量操作POST索引名称docbulk {index:{id的生成方式}} {定义json格式数据} {index:{id的生成方式}} {定义json格式数据} 后面多条批量操作依次类推。。。。。。 批量添加文档数据 63操作分词器 查看分词器效果POSTanalyze { analyzer:分词器类型, text:测试文字内容 }分词器类型内置 standard:英文按照单词切分,并小写处理 whitespace:按照空格切分,不转小写 keyword:不分词,直接将输入作为分词 分词器类型插件ik分词器 iksmart:粗颗粒度分词 ikmaxword:细颗粒度分词 64操作查询 注释 查询所有文档GET索引名称search { query:{matchall:{}} }返回值说明: took:查询时间,单位毫秒 shards:分片情况 Hits:结果集数组 关键字查询GET索引名称search { query:{ term:{ 字段名称:{ value:关键字 } } } }没有使用ik分词器情况下,默认分词的关键字分词说明: 1、text类型:中文单个字进行分词,英文单个单词分词 2、不分词类型:除text类型外的其它类型都不分词,查询的话要把不同类型的关键字都写全才可以 过滤查询GET索引名称search { query:{ bool:{ must:〔 { 查询方式:全部关键字查询。。。等 } 〕, filter:〔 { 过滤方式:单条件多条件等 } 〕 } } }执行流程: 先过滤之后,在进行查询,适用数据量大的场景下 查询方式: 过滤方式: