If you are running in ECS mode v8 (the default) then you should be getting an error message for each lookup
GeoIP Filter in ECS-Compatiblity mode requires a
targetwhensourceis not anipsub-field, eg. [client][ip]>,
If you change your mutate to
mutate { rename => { "source_ip" => "[source][ip]" } }
then you will get
"source" => {
"ip" => "103.161.42.21",
"geo" => {
"location" => {
"lon" => 79.0011,
"lat" => 21.9974
},
"country_iso_code" => "IN",
"timezone" => "Asia/Kolkata",
"continent_code" => "AS",
"country_name" => "India"
}